python(深浅拷贝)

深浅拷贝

变量赋值相当于贴标签

浅拷贝

#在同一代码块下:
a1 = [1,2, [3,1]]
b1 = a1.copy()

b1相当于在内存中重新开辟了一块新的内存地址,与a1不的id不同.不过其内部元素引用是公用的

# 在不同代码块下:
也是同理

image-20200911160121838

深拷贝

# 同一代码块下
import copy
l1 = [1, 'alex', True, (1,2,3), [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1), id(l2))  # 2788324482440 2788324483016  #
print(id(l1[0]),id(l2[0]))  # 1470562768 1470562768
print(id(l1[-1]),id(l2[-1]))  # 2788324482632 2788324482696
print(id(l1[-2]),id(l2[-2]))  # 2788323047752 2788323047752



for i in range(len(l1)-1):
...     print(id(l1[i]), id(l2[i]))
...     
140704271531072 140704271531072  #0  公用
1986645091248 1986645091248			#1  公用
140704271028752 140704271028752		#2  元组公用
1986645375080 1986645375080		#3		可变的不共用重新创建


对于深拷贝来说,

image-20200911162737223

思考:

1.浅拷贝的定义,深拷贝的定义.

答案:

浅拷贝的列表在内存中重新创建,列表内的元素都是公用的

深拷贝的列表在内存中重新创建,列表内不可变元素是公用的,可变元素即(列表)是重新创建的

posted on 2020-09-12 16:47  sunnywillow  阅读(89)  评论(0编辑  收藏  举报