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

      起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混。
      python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝,拷贝得到的不可变对象的内存地址都与先前一样,现在想想,仍然觉得很奇怪。所以,我就干脆从可变对象和不可变对象出发,重新考虑这个问题,把拷贝的效果和对象内存地址的变化理个清楚。
     
    经过实验,有如下结论:
     
    从内存地址上来看,
    不可变对象
      无论深浅copy还是赋值,在操作完成后,新旧不可变对象的内存地址都是相同的。
    区别在于可变对象
      赋值操作后,完全相同;
      浅copy后,最外层可变对象的地址不同,但除此之外的任何可变对象的地址都一样(没有被拷贝);
      深copy后,所有可变对象的地址都不同。
     
    所以,可以认为,python中的深浅拷贝是针对可变对象而言的。
     
    那么,从拷贝效果(针对可变对象)上来看,
    赋值是完全没有拷贝;
    浅copy仅仅是肤浅地拷贝了一个外壳;
    深copy是深入内部拷贝了所有对象。
     
    ps.函数的参数传递和赋值相同,是传址
  • 相关阅读:
    先创建项目 后版本化的步骤
    EditorLineEnds.ttr 错误问题
    TStringList 的Sorted属性
    Delphi out 参数 string Integer
    unity 调整摄像机视角完整脚本
    unity windowEditor平台下鼠标左键控制摄像机的视角
    C# 哈希表HashTable的简单使用
    唯一分解定理
    费马小定理的证明
    树状数组--求逆序对个数
  • 原文地址:https://www.cnblogs.com/pyonwu/p/10596424.html
Copyright © 2011-2022 走看看