在 Python3 中,引用、浅拷贝和深拷贝是常用的概念。
- 引用是指两个变量指向同一个对象,它们在内存中的地址相同,修改其中任意一个变量都会影响到另外一个变量。
- 浅拷贝是指创建一个新的对象,但是这个新的对象会引用原始对象中的子对象。也就是说,新的对象不会复制原始对象中子对象的内存空间,而是共享原始对象中子对象的内存空间。因此,当修改原始对象中的子对象时,新的对象也会发生改变。
- 深拷贝是指创建一个新的对象,并且递归地复制原始对象中所有的子对象。也就是说,新的对象不仅会复制原始对象中子对象的内存空间,还会为每个子对象分配新的内存空间。因此,当修改原始对象中的子对象时,新的对象不会发生改变。
下面是示例代码:
# 引用
a = [1, 2, 3]
b = a
b.append(4)
print(a) # 输出 [1, 2, 3, 4]
# 浅拷贝
import copy
a = [1, [2, 3], 4]
b = copy.copy(a)
b[1].append(5)
print(a) # 输出 [1, [2, 3, 5], 4]
# 深拷贝
import copy
a = [1, [2, 3], 4]
b = copy.deepcopy(a)
b[1].append(5)
print(a) # 输出 [1, [2, 3], 4]
在上面的代码中,我们首先对列表 a
进行了引用。然后我们使用了 copy.copy()
进行浅拷贝和 copy.deepcopy()
进行深拷贝。最后我们修改了 b
中的子对象并打印输出了 a
的值。可以看出,引用操作会影响到原始对象,而浅拷贝只复制了对象的一层,并没有为每个子对象分配新的内存空间,因此它们共享同一个子对象的内存空间。而深拷贝则递归地复制了所有的子对象,因此新的对象与原始对象完全独立,互相不受影响。