Python基础之深拷贝与浅拷贝

赋值

在Python中,  赋值实际上传递的是对象的引用, 即将一个变量赋值给另一个变量, 就是将这个变量所指向的值的引用传递给新的变量,

这样, 如果修改了旧的变量, 新的变量也会发生变化

old_var = [111, 222, 333]
new_var = old_var

print(old_var)
print(new_var)

print(id(old_var))
print(id(new_var))

浅拷贝

浅拷贝拷贝的是对象的第一层元素的地址, 所以在Python中, 浅拷贝分为两种情况

当对象中所包含的元素都为不可变类型的时候, 那么原始数据改变, 新数据不会改变

list1 = ['aaa', 'bbb', 'ccc']
list2 = list1.copy()

print(id(list1))
print(id(list2))

print(list1)
print(list2)

list1[2] = 'ddd'

print(list1)
print(list2)

当对象所包含的元素有可变类型的时候, 如果该元素的数据改变, 那么新数据也会改变

list1 = ['aaa','bbb',[1, 2]]

list2 = list1.copy()
print(list1)
print(list2)
print(id(list1), id(list2))

list1[2][0] = 111
list1[2][1] = 222

print(list1)
print(list2)

  

深拷贝

完全拷贝父对象及其子对象,所以原始对象的改变不会造成深拷贝里任何子元素的改变

import copy

list1 = [ 'aaa','bbb',[1, 2]]

list2 = copy.deepcopy(list1)
print(id(list1), id(list2))

list1[2][0] = 111
list1[2][1] = 222

print(list1)
print(list2)
原文地址:https://www.cnblogs.com/featherwit/p/12902696.html