Python - DeepCopy

版权声明:转载请注明出处 https://blog.csdn.net/qq_42292831/article/details/89409462
foo = ['Monty', 'Python'] 

bar = foo

对于第一条语句,系统首先执行右端语句(划分一段内存空间,分别存储两个子元素),随后将该段内存的地址赋值给foo;

第二条语句,将foo(地址)直接赋值给bar(这里就表明bar的地址也指向第一条语句分配的内存空间),一旦修改了foo对应内存空间内的值,那就会直接影响bar对应的值(因为二者指向同一片内存);

 

上述过程即“浅拷贝”的原理,而深拷贝则直接开辟全新的内存空间并将原空间的数据进行复制



[ Copy模块下的浅拷贝与深拷贝 ]

导入第三方包:import copy

copy.copy()    #比直接使用=进行拷贝深一层的浅拷贝

copy.deepcopy()    #深拷贝

<一> copy.copy()

a = ["aaa","bbb","ccc"]
b = copy.copy(a)
a[0] = "aaaa"
print(b)

>>> 这时我们修改a中的数据则不会影响到b中的数据,子所以还称之为浅拷贝,是因为一旦在列表内部再增加一个字列表,字列表数据就会随着a的变化而变化

a = ["aaa","bbb","ccc",["ddd","eee"]]
b = copy.copy(a)
a[0] = "aaaa"
print(b)
a[3][1]="eeee"
print(b)

>>> 这就表明:

当列表中有子列表时,子列表在元列表中是以地址的形式存储的,即在另外一个地方开辟一个新的内存空间,随后将该段空间的地址放进原列表的子列表位置,当访问时再进行地址的跳转;

>>> 为了解决多层列表的问题,出现了[ 深拷贝 ]

<二> copy.deepcopy()

>>> 将完全按照原列表的内存空间新开辟一个相同的内存空间, 将一个内存区的全部内容进行拷贝:

猜你喜欢

转载自blog.csdn.net/qq_42292831/article/details/89409462