Python-浅拷贝与深拷贝
1、浅拷贝
1 >>> import copy 2 >>> 3 >>> num1 = [1, 2, 3, ['a', 'b'], 4, 5] 4 >>> num2 = copy.copy(num1) 5 >>> print(id(num1), id(num2)) 6 31514312 51066184 #指向不同内存地址 7 >>> 8 >>> print(id(num1[3]), id(num2[3])) 9 51136456 51136456 #两个列表中的['a', 'b']指向相同内存地址
可以得出结果
1 #改变其中一个列表中的外层元素时,另一个列表的外层元素不会发生变化 2 >>> num1[2] = 'c' 3 #而无论改变哪个列表的内层元素时,两个列表的内层元素都会发生变化 4 >>> num2[3][0] = 'd' 5 >>> print(num1) 6 [1, 2, 'c', ['d', 'b'], 4, 5] 7 >>> print(num2) 8 [1, 2, 3, ['d', 'b'], 4, 5]
2、深拷贝
都是指向不同的内存地址
1 >>> import copy 2 >>> num1 = [1, 2, 3, ['a', 'b'], 4, 5] 3 >>> num2 = copy.deepcopy(num1) 4 >>> print(id(num1), id(num2)) 5 51136520 51136328 6 >>> print(id(num1[3]), id(num2[3])) 7 51136776 51066952
可以得出结论
1 #无论哪一个列表的内外层元素发生变化都不影响另一个列表 2 >>> num1[2] = 'c' 3 >>> num2[3][0] = 'd' 4 >>> print(num1) 5 [1, 2, 'c', ['a', 'b'], 4, 5] 6 >>> print(num2) 7 [1, 2, 3, ['d', 'b'], 4, 5]