📜  类的浅拷贝和深拷贝的区别(1)

📅  最后修改于: 2023-12-03 15:41:10.684000             🧑  作者: Mango

类的浅拷贝和深拷贝的区别

在Python中,对象是通过引用传递的,每个变量都是指向对象内存空间的一个引用。当需要拷贝一个对象时,就需要了解浅拷贝和深拷贝的区别。

浅拷贝

浅拷贝是将原始对象的引用复制到新对象中,新对象中的属性指向与原始对象相同的对象。即浅拷贝只拷贝对象的引用,而不是对象本身。当使用浅拷贝时,新的对象与原始对象共享同一内存空间,改变其中一个对象的属性,也会对另一个对象产生影响。

用Python的做法如下:

import copy

class A:
    def __init__(self, lst):
        self.lst = lst

a = A([1,2,3])
b = copy.copy(a)

print(a.lst)   # [1, 2, 3]
print(b.lst)   # [1, 2, 3]

# 修改a中的lst元素
a.lst.append(4)
print(a.lst)   # [1, 2, 3, 4]

# b中的lst元素也发生了变化
print(b.lst)   # [1, 2, 3, 4]
深拷贝

深拷贝会拷贝原始对象及其所有属性的副本。在新的对象中,所有对象都是新的,原始对象和新对象不共享任何内存空间。因此,使用深拷贝可以保证原始对象和新对象的属性互不干扰,修改其中一个对象的属性,不会对另一个对象产生影响。

用Python的做法如下:

import copy

class A:
    def __init__(self, lst):
        self.lst = lst

a = A([1,2,3])
b = copy.deepcopy(a)

print(a.lst)   # [1, 2, 3]
print(b.lst)   # [1, 2, 3]

# 修改a中的lst元素
a.lst.append(4)
print(a.lst)   # [1, 2, 3, 4]

# b中的lst元素没有发生变化
print(b.lst)   # [1, 2, 3]

在实际项目中,应视具体情况选择浅拷贝或深拷贝,以保证程序的正确性和高效性。