浅拷贝和深拷贝区别

浅拷贝:

a = [1,'changhao',[]]
b = a[:]
切片操作就是浅拷贝
b 的所有地址引用原来a中的地址,当然a与b的地址是不相同的
字符串和数字类型都是不可变的,一旦发生改变就会产生新的地址,刷新引用
例如:
b[0] = 100
此时id(b[0])和id(a[0])的地址就会不同

产生浅拷贝的方法:
切片操作,使用list()工厂函数创建对象

深拷贝:

深拷贝就是把所有的地址创建新的出来,可是这样做的话太浪费空间,
并且对于字符串数字这类不可变类型如果重新赋值的话就会创建新的地址,然后刷新引用,
所以对于数字字符串一开始不必创建新的地址. 对于列表等可变类型是一开始就创建新的地址.

深拷贝的创建方式:
只能通过copy中的deepcopy创建.

你可能感兴趣的:(浅拷贝和深拷贝区别)