*为了节省内存,python中的赋值,是直接赋值引用的,即让这两个变量都指向了同一个内存地址,举个例子,a=b,如果b的值改变,a的值同样 也会改变,因为在内存中,他们都是在同一个位置储存.
import copy
print("python中的赋值")
print('*'*20)
l1=[1,2,3,4,5,[100,200]]
l2=l1
print("l2是:",l2)
l1.append(7)
print("给l1增加一个元素,这是l2为")
print(l2)
l1[5].pop()
print("给l1的子对象减少一个元素,这是l2为")
print(l2)
print("浅拷贝")
print('*'*20)
*理解了赋值,那么如果我需要在例子中,改变b的值a不改变怎么办呢?浅拷贝解决了这个问题,所谓拷贝,就是指重新分配一个内存空间,然后把b中的值赋值一份放在这块内存空间上,这样,改变b就不会改变a了.但是,浅拷贝只能够复制父对象,子对象其实还是使用了原来的引用.比如b中有一个列表的值改变了,那么a中的原列表就会改变.
import copy
print("浅拷贝")
print('*'*20)
l1=[1,2,3,4,5,[100,200]]
l2=l1.copy()
print("l2是:",l2)
l1.append(7)
print("给l1增加一个元素,这是l2为")
print(l2)
l1[5].pop()
print("给l1的子对象减少一个元素,这是l2为")
print(l2)
*所谓深拷贝,就是完全拷贝了.解决了浅拷贝的问题,b拷贝了a之后,他们就完全关系了.不管是改变b的子对象还是父对象,都不会改变a的值.
import copy
print("深拷贝")
print('*'*20)
l1=[1,2,3,4,5,[100,200]]
l2=copy.deepcopy(l1)
print("l2是:",l2)
l1.append(7)
print("给l1增加一个元素,这是l2为")
print(l2)
l1[5].pop()
print("给l1的子对象减少一个元素,这是l2为")
print(l2)
赋值一个改另一个必改,浅拷贝改子对象改父对象不改,深拷贝怎么改都不改
本文章使用limfx的vscode插件快速发布