版权声明:本文为博主原创文章,未经博主允许不得转载。

  1. >>> mylist1 = [1, 2, 3, 4]
  2. >>> myl = mylist1
  3. >>> myl
  4. [1, 2, 3, 4]
  5. >>> mylist1[0] = 5
  6. >>> mylist1
  7. [5, 2, 3, 4]
  8. >>> myl
  9. [5, 2, 3, 4]
>>> mylist1 = [1, 2, 3, 4]
>>> myl = mylist1
>>> myl
[1, 2, 3, 4]
>>> mylist1[0] = 5
>>> mylist1
[5, 2, 3, 4]
>>> myl
[5, 2, 3, 4]

这个就是浅复制

浅复制仅仅只是复制了对对象的引用,即 mylist1 和 myl 指向的是同一个对象,所以如果改变了该对象的元素的话,则 mylist1 和 myl 所指向的对象都会改变,因为实际上就是同一个对象

  1. >>> id(mylist1)
  2. 202009976
  3. >>> id(myl)
  4. 202009976
>>> id(mylist1)
202009976
>>> id(myl)
202009976

可以看出两者指向的对象在内存中的地址是相同的,即是同一个对象

  1. >>> import copy
  2. >>> mylist2 = [5, 6, 7, 8]
  3. >>> myl2 = copy.deepcopy(mylist2)
  4. >>> mylist2[0] = 9
  5. >>> mylist2
  6. [9, 6, 7, 8]
  7. >>> myl2
  8. [5, 6, 7, 8]
>>> import copy
>>> mylist2 = [5, 6, 7, 8]
>>> myl2 = copy.deepcopy(mylist2)
>>> mylist2[0] = 9
>>> mylist2
[9, 6, 7, 8]
>>> myl2
[5, 6, 7, 8]

这个就是深复制

  1. >>> id(mylist2)
  2. 200662512
  3. >>> id(myl2)
  4. 202007336
>>> id(mylist2)
200662512
>>> id(myl2)
202007336

而深复制后的两个变量则指向的是两个不同的对象,可以把这两个对象理解为张得一模一样的双胞胎,虽然很像,但实际上是两个不同的人,所以其中一个人发生了改变(如受伤了)也不会影响到另一个人

  1. >>> id(mylist3[0])
  2. 30909144
  3. >>> id(myl3[0])
  4. 30909144
  5. >>> id(mylist3[3])
  6. 200634696
  7. >>> id(myl3[3])
  8. 202008136
  9. >>> mylist3 = [1, "a", 3, [4, 5, 6], [[7, 8, 9]]]
  10. >>> myl3 = copy.deepcopy(mylist3)
  11. >>> id(mylist3[1])
  12. 31110016
  13. >>> id(myl3[1])
  14. 31110016
>>> id(mylist3[0])
30909144
>>> id(myl3[0])
30909144
>>> id(mylist3[3])
200634696
>>> id(myl3[3])
202008136
>>> mylist3 = [1, "a", 3, [4, 5, 6], [[7, 8, 9]]]
>>> myl3 = copy.deepcopy(mylist3)
>>> id(mylist3[1])
31110016
>>> id(myl3[1])
31110016

但是如果 mylist3 和 myl3 的元素指向的是同一个 『不可变』 的对象时,则 他们指向的仍然是同一个对象, 如 1 和 "a"

python中深copy,浅copy的更多相关文章

  1. Python学习-赋值、浅copy和深copy

    Python Copy: 在Python语言中,分为浅拷贝和深拷贝两种形式,也就是官方文档中的Shadow copy和Deep copy.在对简单的对象(object)进行复制时,两者没有区别,如下面 ...

  2. 深、浅copy

    深.浅copy多用于列表 浅copy:第一层中不变的数据是独立的,可变类型元素指向同一块内存地址 l1 = [1,2,3,["a","b"]] l2 = l1. ...

  3. 2 引用 深copy 浅copy

    1. is == 总结 is 是比较两个引用是否指向了同一个对象(引用比较). == 是比较两个对象是否相等. In [1]: a = [11,22,33] In [2]: b = [11,22,33 ...

  4. python中深copy,浅copy与赋值语句的区别

    以下详细讲解:python深复制,浅复制与赋值语句的区别 1. '='赋值语句,常规复制只是将另一个变量名关联到了列表,并不进行副本复制,实例如下: var1=[12,35,67,91,101]var ...

  5. python学习笔记-(六)深copy&浅copy

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象 ...

  6. python基础之赋值/深copy/浅copy

    首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的. 那么,让我们来对那些可变的像list set dict t ...

  7. 【Python初学】深copy&浅copy

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. copy.copy 浅拷贝 只拷贝父对象 ...

  8. python中深复制与浅复制

    转载:http://blog.csdn.net/vicken520/article/details/8227524 java中也经常碰见这种问题.时间原因就不写java方面啦 Python深复制浅复制 ...

  9. python中深复制和浅复制区别

    在python中,对象赋值实际上是对象的的引用,当创建一个对象,然后把它赋值给另外一个变量的时候,python没有拷贝这个对象,而只是拷贝了这个对象的引用,多以就出现了浅复制,即复制后原对象改变后,复 ...

  10. python中的join.set ,copy以及删除注意事项:

    1 ,join  :  将对象以字符串的方式拼接成一个整体 for E :  li = ["李白", "是", "诗仙"]    s = & ...

随机推荐

  1. ROS(二)Service通信

    使用自定义的消息类型,实现service方式的节点间双向通信 在package目录下创建msg和srv目录,存放package需要使用的.msg和.srv文件. 在ROS中,message被设计为一种 ...

  2. JQuery表单验证插件

    使用jQuery的validate插件实现一个简单的表单验证 <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  3. 第六章 高级I/O函数

    第六章 高级I/O函数 6.1 pipe函数 即管道函数,用于进程间的通信. #include<unistd.h> int pipe(int fd[2]); // fd:filedes / ...

  4. TW实习日记:第17天

    今天又改了一堆bug,比如界面的显示bug,Html字符串的处理.优化了一些交互界面,处理了一个模块数据传输的问题.我发现这些bug真的有一半是粗心导致的,真的真的是,写代码一定要细心细心再细心,不然 ...

  5. 孤荷凌寒自学python第八十三天初次接触ocr配置tesseract环境

    孤荷凌寒自学python第八十三天初次接触ocr配置tesseract环境 (完整学习过程屏幕记录视频地址在文末) 学习Python我肯定不会错过图片文字的识别,当然更重要的是简单的验证码识别了,今天 ...

  6. 学习笔记,99乘法表,嵌套while循环

    line = 0 #定义外循环初变量 while line < 9: #外循环判断语句 line += 1 #改变外循环初变量,避免陷入死循环 row = 0 #定义内循环初变量 while r ...

  7. 《Effective C++》读书笔记 条款03 尽可能使用const 使代码更加健壮

    如果你对const足够了解,只需记住以下结论即可: 将某些东西声明为const可帮助编译器侦测出错误用法,const可被施加于任何作用于内的对象.函数参数.函数返回类型.成员函数本体. 编译器强制实施 ...

  8. 【转载】完全版线段树 by notonlysuccess大牛

    原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...

  9. Sql server在cmd下的使用

    方法一 在DOS提示符下,c:\>isql -U sa -P (此处输入SA密码) 注----大小写敏感 回车后会出现"1>"提示符,表明已成功,此时可在DOS下做任何 ...

  10. js实现滑动器效果

    最近公司在做一个项目,页面中要用到滑动器效果,我的第一反应是使用HTML5 input类型中的range类型,但马上我就否定了这个想法,因为range类型存在浏览器的兼容性问题(在主流浏览器中).但又 ...