浅拷贝
copy函数就是浅拷贝
copy函数是浅拷贝,只对可变类型的第一层对象进行拷贝
对拷贝的对象开辟新的内存空间进行存储,子对象不会开辟新的空间
list1 = [1, 2, 3]
list2 = ['a', list1]
list3 = list2.copy()
print(id(list1))
print(id(list2)) # 三个id都不一样
print(id(list3))
print(id(list2[1])) # 这两个与第5行代码输出id一致,外层的id不一致,但是嵌套在内层的id是一致的
print(id(list3[1]))
list1.append('b')
print(list1) # [1, 2, 3, 'b']
print(list2) # ['a', [1, 2, 3, 'b']]
print(list3) # ['a', [1, 2, 3, 'b']]
两种拷贝方式
a = 1
b = 2
c = [a, b]
# 普通赋值
d = c
# 浅拷贝
e = copy.copy(c)
深拷贝
deepcopy就是深拷贝
只要发现拷贝对象有可变类型就会对该对象到最后一个可变类型的每一层对象进行拷贝
对每一层拷贝的对象都会开辟新的内存空间进行存储
import copy
list1 = [1, [2, 3]]
list2 = copy.deepcopy(list1)
print(id(list1)) # 外层id不一致
print(id(list2))
print(id(list1[1])) # 内层id也不一致
print(id(list2[1]))
list1[1].append('a')
print(list1) # [1, [2, 3, 'a']] 只有list1会添加,list7不会添加,因为id不一致
print(list2) # [1, [2, 3]]
总结
不管是给对象进行浅拷贝还是深拷贝,只要拷贝成功就会开辟新的内存空间存储拷贝的对象
深拷贝和浅拷贝的区别
浅拷贝最多拷贝的对象的一层
深拷贝可能拷贝对象的多层,并且保证数据的独立性和安全性
对于不可变类型的深浅拷贝
不会给拷贝的对象开辟新的内存空间,而只是拷贝了这个对象的引用
标签:python,list1,list2,深浅,print,拷贝,copy,id From: https://blog.csdn.net/qq_64993426/article/details/139212619