版权声明:本文为博主原创文章,未经博主允许不得转载。
- >>> 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"