先上结论:
我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体存在即使改变原有的对象,也不会改变复制之后的对象
浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。相当于复制的地址,指向的新数据
注意
对于简单的对象来说,对象不会改变,只是复杂的对象,list套list这种
import numpy as np
import copy
def COPY():
global origin
origin = [1,2,[3,4]]
global t1
t1 = copy.copy(origin)
global t2
t2 = copy.deepcopy(origin)
print(t1,'----')
print(t1 == t2) # 比 较 内 容
print(t2,'----')
print(t2 is t1) # 比 较 对 象
def UPDATE():
origin[2][0] = 'hey!'
print(origin)
print(t1)
print(t2)
def coPy_easy():
t = 1
p1 = copy.copy(t)
p2 = copy.deepcopy(t)
print(p1 == p2)
print(p1 is p2)
if __name__ == '__main__':
COPY()
UPDATE()
coPy_easy()
# 输出
# [1, 2, [3, 4]] ----
# True 内容还是一样的
# [1, 2, [3, 4]] ----
# False 已经不是同一个对象了
# 修改之后
# [1, 2, ['hey!', 4]]---------origin
# [1, 2, ['hey!', 4]]---------t1 复制的是一个地址
# [1, 2, [3, 4]]-------------t2 复制的是内容,生成了新的对象
# 简单对象
# True
# True 对于简单的对象就是同一个对象了