数据浅/深拷贝

Jinku Hu 2024年2月15日
  1. 浅拷贝
  2. 深拷贝
数据浅/深拷贝

数据拷贝有两种,浅拷贝(shallow copy)以及深拷贝(deep copy)。从名字上可以看出来,浅拷贝,仅拷贝指向对象的指针;而深拷贝,是将整个对象拷贝到另外一块内存中。

浅拷贝

比如,我们有一个列表 [1, [1,2,3]],浅拷贝的话,列表中的第二个元素-列表 [1,2,3] 假如发生变化的话,它会同时在原始列表,以及浅拷贝后的列表做相同的改变,因为它们指向的是同一个内存地址。

A = [1, [1, 2, 3]]
B = A.copy()
A[1].append(4)
print(B)
# Out: [1, [1,2,3,4]]
print(A)
# Out: [1, [1,2,3,4]]
A[1] is B[1]
# Out: True

Python 浅拷贝示例

浅拷贝有两种实现方式,一个是用 copy() 方法,另外一个可以用 copy 模块里面的 copy 函数。
列表类型还有一种浅拷贝方法,就是通过切片来生成的新列表,也是浅拷贝的结果。

A = [1, [1, 2, 3]]
B = A[:]
B[1] is A[1]
# Out: True

深拷贝

深拷贝是完全的将被拷贝对象数据拷贝到新的内存中,新旧两个数据对象地址完全不同,它们是 100%独立的数据。

import copy

A = [1, [1, 2, 3]]
B = copy.deepcopy(A)
A is B
# Out: False
A[1].append(4)
print(A, B)
# Out: [1, [1, 2, 3, 4]] [1, [1, 2, 3]]
A[1] is B[1]

Python 深拷贝示例

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook