深浅copy
1、先看赋值运算
h1 = [1,2,3,['aihuidi','hhhh']] h2 = h1 h1[0] = 111 print(h1) print(h2) #结果: # [111, 2, 3, ['aihuidi', 'hhhh']] # [111, 2, 3, ['aihuidi', 'hhhh']] h1[3][0] = 'file' print(h1) print(h2) #结果: # [111, 2, 3, ['file', 'hhhh']] # [111, 2, 3, ['file', 'hhhh']]
ps:对与赋值运算来说,h1和h2指向的是同一个内存地址,所以它们是完全一样的。
为什么要拷贝?
1
|
当进行修改时,想要保留原来的数据和修改后的数据 |
数字字符串 和 集合 在修改时的差异? (深浅拷贝不同的终极原因)
1
2
3
|
在修改数据时: 数字字符串:在内存中新建一份数据 集合:修改内存中的同一份数据 |
对于集合,如何保留其修改前和修改后的数据?
1
|
在内存中拷贝一份 |
对于集合,如何拷贝其n层元素同时拷贝?
1
|
深拷贝 |
2,浅拷贝copy。
对于浅copy来说,只是在内存中重新创建了开辟了一个空间存放一个新列表,但是新列表中的元素与原列表中的元素是公用的。
3,深拷贝deepcopy。
对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。