几种复制的区别

#1:赋值型  指向了同一个 存储的位置就是那一个

data = [1,4,5,4,5,89,6,5,4,5,2,5,6]
new_data = data
data.pop()
print(data)
print(new_data)
print('--------------------')
new_data.pop()
print(data)
print(new_data)
# [1, 4, 5, 4, 5, 89, 6, 5, 4, 5, 2, 5]
# [1, 4, 5, 4, 5, 89, 6, 5, 4, 5, 2, 5]
# --------------------
# [1, 4, 5, 4, 5, 89, 6, 5, 4, 5, 2]
# [1, 4, 5, 4, 5, 89, 6, 5, 4, 5, 2]
data = [1,4,5,4,5,89,6,5,4,5,2,5,6]
new_data = copy(data) #返回的是array 没有独立出来
new_data2 = deepcopy(data) #完全独立出来了,生成了一个新的存储位置
#对于上边的data,两者是没有区别的(除了存储 的位置)
print(new_data == new_data2) #true
print(new_data2 is new_data) #false 里面的内容相等,但存储不同
data.pop()
print(new_data)
print(new_data2)   #两者都不会变
# [1, 4, 5, 4, 5, 89, 6, 5, 4, 5, 2, 5, 6]
# [1, 4, 5, 4, 5, 89, 6, 5, 4, 5, 2, 5, 6]
#对于列表中元素有列表的两者不同
data1 = [1,4,2,[5,6,2],5,9]
data1_new = copy(data1) #相当于浅复制,只复制表面
data1_new1 = deepcopy(data1)#完全的复制
data1[-1] = 8888
print(data1)
print(data1_new)
print(data1_new1)
print('------------------')
# [1, 4, 2, [5, 6, 2], 5, 8888]
# [1, 4, 2, [5, 6, 2], 5, 9]
# [1, 4, 2, [5, 6, 2], 5, 9]
data1[3][1] = 9999  #如果改变的是里面的列表 copy里面的也会跟着变 deepcopy不会
print(data1)
print(data1_new)
print(data1_new1)
# [1, 4, 2, [5, 9999, 2], 5, 8888]
# [1, 4, 2, [5, 9999, 2], 5, 9]
# [1, 4, 2, [5, 6, 2], 5, 9]


猜你喜欢

转载自blog.csdn.net/qq_27015119/article/details/80883834