copy模块
01.当对象被复制时,根据复制的方式的不同可分为赋值,浅拷贝和深拷贝:
- 赋值,即使用”=”等于号复制,复制的对象具有原对象完全一致的内存引用。
- 当被复制的对象为可变类型时,修改任意对象的内容都会对另一个对象进行修改。
- 当被复制的对象为不可变类型时,修改对象的内容不会影响到另一个对象。
- 浅拷贝(影子拷贝),使用copy()复制。
- 当被拷贝的对象中没有嵌套其他可变类型时(比如列表嵌套列表),会复制元素并引用不同的内存地址。
- 当被拷贝的对象中嵌套了其他可变类型时,该嵌套对象的会引用同一个内存地址,比如:
list_A = [1, 2, 3, [4,5]] list_B = list_A.copy() print(id(list_A), id(list_B)) print(id(list_A[3]), id(list_B[3]))
- list_A[3]与list_B[3]的内存地址一致,修改其内容会同时修改2边的内容。
- 深拷贝,使用copy.deepcopy()复制。
- 会迭代复制被拷贝对象中的每一个元素到新的对象中,并且确保每个元素引用不同的内存地址,比如:
import copy list_A = [1, 2, 3, [4,5]] list_B = copy.deepcopy(list_A) print(id(list_A), id(list_B)) print(id(list_A[3]), id(list_B[3]))
- list_A[3]与list_B[3]的内存地址不一致,修改其内容不会影响另一个对象。
- 会迭代复制被拷贝对象中的每一个元素到新的对象中,并且确保每个元素引用不同的内存地址,比如:
文档更新时间: 2021-02-21 21:43 作者:闻骏