python中深copy,浅copy
版权声明:本文为博主原创文章,未经博主允许不得转载。
- >>> 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 = [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
>>> 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]
>>> 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(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
>>> 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"