Python中的浅复制、深复制

参考

  1. https://docs.python.org/3/library/copy.html?highlight=copy copy#copy.copy
  2. https://en.wikipedia.org/wiki/Object_copying#Shallow_copy

Fluent Python第四部分第8章

A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.

A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.

Note:

  1. 直接赋值:其实就是对象的引用(别名)。
  2. 浅复制(shallow copy):copy模块的copy方法,复制父对象,不会复制对象的内部的子对象。
  3. 深复制(deepcopy): copy 模块的 deepcopy 方法,完全复制了父对象及其子对象。

    注意,浅复制和深复制都创建新的对象,所以id()返回的值不同。浅复制的元素使用原始元素的引用(地址),而深复制的元素重拥有新的地址(即深复制copy everything).

    深复制符合我们的认知,复制返回的对象就是一个完全独立的对象。

例子1. 浅复制

import copy
origin_dict = {
1 : [1,2,3]
}
#浅复制可以引入copy模块或者compound objects自带的copy()
#shcp_didct = origin_dict.copy()
shcp_dict = copy.copy(origin_dict) print(id(origin_dict))
print(id(shcp_dict)) print(origin_dict[1].append(555)) print(origin_dict)
print(shcp_dict)

Python中的浅复制、深复制

例子2. 深复制

#深复制必须引入copy模块
import copy
origin_dict = {
1 : [1,2,3]
} shcp_dict = copy.deepcopy(origin_dict) print(id(origin_dict))
print(id(shcp_dict)) print(origin_dict[1].append(555)) print(origin_dict)
print(shcp_dict)

Python中的浅复制、深复制

上一篇:排序方法之标准库中的快排 qsort ()函数


下一篇:C++ Primer : 第十章 : 泛型算法 之 只读、写和排序算法