Python中的拷贝分为两种,浅拷贝与深拷贝
浅拷贝:浅拷贝是对于一个对象的顶层拷贝。通俗的理解是:拷贝了引用,并没有拷贝内容,其中一方对内容作了修改,另一方也会受到影响
深拷贝:对于一个对象所有层次的拷贝(递归),只拷贝内容,双方地址不一样,其中一方对内容作了修改,另一方不受影响。另外注意:如果深拷贝的对象是一个不可变类型(包括其内部对象也是不可变类型)
那么对该对象深拷贝作用相当于浅拷贝,地址不会发生变化
浅拷贝:
a = [1,2,3,4]
b = a
print(id(a))
print(id(b))
a.append(5)
print(a)
print(b)
深拷贝:
import copy
'''
a = [1,2,3,4]
b = copy.deepcopy(a)
print(id(a))
print(id(b))
print(a)
print(b)
print('*'*40)
a.append(5)
print(a)
print(b)
'''
'''
a = [11,22,33]
b = [44,55,66]
c = [a,b]
d = copy.deepcopy(c)
print(c)
print(d)
print('*'*50)
a.append(120)
#c[0].append(120)
print(c)
print(d)
'''
'''
a = [11,22,33]
b = [44,55,66]
c = (a,b)
d = copy.deepcopy(c)
print(c)
print(d)
print('*'*50)
a.append(120)
#c[0].append(120)
print(c)
print(d)
'''
#特例:深拷贝 = 浅拷贝
a = (1,2,3,4)
b = copy.deepcopy(a)
print(a)
print(b)
print(id(a))
print(id(b))
a = (1,2,3,4)
b = (1,2,3,4,a)
c = copy.deepcopy(b)
print(c)
print(b)
print(id(c))
print(id(b))
copy.copy()这个函数执行后的结果
与变量类型是可变还是不可变有关
如果是可变类型(如列表),它为深拷贝
如果是不可变类型(如元组),它为浅拷贝
如果变量里面还有嵌套的对象,那么该对象为浅拷贝
'''
import copy
'''
a = [1,2,3,4]
#相当于深拷贝
b = copy.copy(a)
print(id(a))
print(id(b))
a.append(5)
print(a)
print(b)
print('*'*50)
'''
'''
a = (1,2,3,4)
#相当于浅拷贝
b = copy.copy(a)
print(id(a))
print(id(b))
print('*'*50)
'''
'''
a = [11,22,33]
b = [44,55,66]
c = [a,b]
d = copy.copy(c)
print(id(c))
print(id(d))
print(c)
print(d)
print('*'*50)
a.append(120)
#c[0].append(120)
print(c)
print(d)
print('*'*50)
'''
a = [11,22,33]
b = [44,55,66]
c = (a,b)
d = copy.copy(c)
print(id(c))
print(id(d))
print(c)
print(d)
print('*'*50)
a.append(120)
#c[0].append(120)
print(c)
print(d)