赋值
在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)