zoukankan      html  css  js  c++  java
  • 关于python深浅拷贝的个人浅见

      起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混。
      python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝,拷贝得到的不可变对象的内存地址都与先前一样,现在想想,仍然觉得很奇怪。所以,我就干脆从可变对象和不可变对象出发,重新考虑这个问题,把拷贝的效果和对象内存地址的变化理个清楚。
     
    经过实验,有如下结论:
     
    从内存地址上来看,
    不可变对象
      无论深浅copy还是赋值,在操作完成后,新旧不可变对象的内存地址都是相同的。
    区别在于可变对象
      赋值操作后,完全相同;
      浅copy后,最外层可变对象的地址不同,但除此之外的任何可变对象的地址都一样(没有被拷贝);
      深copy后,所有可变对象的地址都不同。
     
    所以,可以认为,python中的深浅拷贝是针对可变对象而言的。
     
    那么,从拷贝效果(针对可变对象)上来看,
    赋值是完全没有拷贝;
    浅copy仅仅是肤浅地拷贝了一个外壳;
    深copy是深入内部拷贝了所有对象。
     
    ps.函数的参数传递和赋值相同,是传址
  • 相关阅读:
    Apple Swift编程语言入门教程
    网络请求错误
    Mac使用大全
    MPMovieplayerController添加新控件
    ios9 新变化
    UITableView总结
    UINavigationController的简单学习
    HTML
    谓词(NSPredicate)
    NSString字符串
  • 原文地址:https://www.cnblogs.com/pyonwu/p/10596424.html
Copyright © 2011-2022 走看看