python中的拷贝

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)

你可能感兴趣的:(python中的拷贝)