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]

 

posted @ 2020-05-31 22:24  drunkle  阅读(168)  评论(0编辑  收藏  举报