深拷贝和浅拷贝
不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值
import copya = 1b = copy.copy(a) # 浅拷贝ac = copy.deepcopy(a) # 深拷贝aprint(a is b)print(a is c)>>> True>>> Trueis比较的是二者的内存地址是否相同
浅拷贝
浅拷贝只拷贝可变对象的第一层,如果可变对象中还有可变的对象,那么第二层拷贝不到,拷贝不到就是说,第二层的内存地址是共用的,都是指向同一片内存地址
import copya = [1, 2, [3, 4]]b = copy.copy(a)print(a is b)print(a[2] is b[2])>>> a的内存地址 140369750660592>>> b的内存地址 140369750677376>>> False>>> a[2]的内存地址 140369750677056>>> b[2]的内存地址 140369750677056>>> True浅拷贝只拷贝第一层,所以b拷贝出来的内存地址是与a不同的,但因为浅拷贝只能拷贝第一层,所以b[2]这个列表拷贝不到,指向的内存地址仍然是a[2]的内存地址
深拷贝
深拷贝对于可变的对象,全部拷贝下来,全部都开辟一片新的内存地址
import copya = [1, 2, [3, 4]]b = copy.deepcopy(a)print(\'a的内存地址\', id(a))print(\'b的内存地址\', id(b))print(a is b)print(\'a[2]的内存地址\', id(a[2]))print(\'b[2]的内存地址\', id(b[2]))print(a[2] is b[2])>>> a的内存地址 140312626337184>>> b的内存地址 140312626353968>>> False>>> a[2]的内存地址 140312626353648>>> b[2]的内存地址 140312626337264>>> False