『python思考』关于列表的浅复制和深复制的理解

来源:互联网 发布:mac os 10.13更新内容 编辑:程序博客网 时间:2024/06/07 02:02
>>> 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 所指向的对象都会改变,因为实际上就是同一个对象

>>> id(mylist1)202009976>>> id(myl)202009976
可以看出两者指向的对象在内存中的地址是相同的,即是同一个对象

>>> import copy>>> mylist2 = [5, 6, 7, 8]>>> myl2 = copy.deepcopy(mylist2)>>> mylist2[0] = 9>>> mylist2[9, 6, 7, 8]>>> myl2[5, 6, 7, 8]
这个就是深复制

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

>>> 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"



0 0
原创粉丝点击