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

      起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混。
      python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝,拷贝得到的不可变对象的内存地址都与先前一样,现在想想,仍然觉得很奇怪。所以,我就干脆从可变对象和不可变对象出发,重新考虑这个问题,把拷贝的效果和对象内存地址的变化理个清楚。
     
    经过实验,有如下结论:
     
    从内存地址上来看,
    不可变对象
      无论深浅copy还是赋值,在操作完成后,新旧不可变对象的内存地址都是相同的。
    区别在于可变对象
      赋值操作后,完全相同;
      浅copy后,最外层可变对象的地址不同,但除此之外的任何可变对象的地址都一样(没有被拷贝);
      深copy后,所有可变对象的地址都不同。
     
    所以,可以认为,python中的深浅拷贝是针对可变对象而言的。
     
    那么,从拷贝效果(针对可变对象)上来看,
    赋值是完全没有拷贝;
    浅copy仅仅是肤浅地拷贝了一个外壳;
    深copy是深入内部拷贝了所有对象。
     
    ps.函数的参数传递和赋值相同,是传址
  • 相关阅读:
    查找算法:二分查找法(折半查找)
    钞票找零-贪心,动态规划算法
    PHP7与php5
    网站高并发解决方案(理论知识) 二
    loj#6566. 月之都的密码
    我的 Linux 配置
    CTSC2011 幸福路径
    WC2018 即时战略
    uoj#460 新年的拯救计划
    bzoj 5016 一个简单的询问
  • 原文地址:https://www.cnblogs.com/pyonwu/p/10596424.html
Copyright © 2011-2022 走看看