返回

8 月进步系列分享(二):浅谈深浅拷贝与变量赋值

前端

前言:值传递与引用传递

在 Python 中,变量可以存储两种基本类型的值:值类型和引用类型。值类型存储的是值本身,而引用类型存储的是对另一个对象的引用。当对值类型变量进行赋值时,会将值复制到新变量中;而当对引用类型变量进行赋值时,只会将对对象的引用复制到新变量中。

浅拷贝

浅拷贝是指只复制对象的引用,而不复制对象本身。浅拷贝可以通过多种方式实现,例如:

  • 使用 copy.copy() 函数:
import copy

x = [1, 2, 3]
y = copy.copy(x)

y[0] = 42

print(x)  # [1, 2, 3]
print(y)  # [42, 2, 3]
  • 使用 [::] 切片操作符:
x = [1, 2, 3]
y = x[::]

y[0] = 42

print(x)  # [1, 2, 3]
print(y)  # [42, 2, 3]

浅拷贝对于许多应用场景来说已经足够了。例如,如果你有一个列表,并且你想在另一个变量中创建一个该列表的副本,以便你可以对副本进行修改,而不影响原始列表,那么浅拷贝就是一种很好的选择。

深拷贝

深拷贝是指复制整个对象,包括其属性和值。深拷贝可以通过多种方式实现,例如:

  • 使用 copy.deepcopy() 函数:
import copy

x = [1, 2, 3]
y = copy.deepcopy(x)

y[0] = 42

print(x)  # [1, 2, 3]
print(y)  # [42, 2, 3]
  • 使用 json 模块:
import json

x = [1, 2, 3]
y = json.loads(json.dumps(x))

y[0] = 42

print(x)  # [1, 2, 3]
print(y)  # [42, 2, 3]

深拷贝对于某些应用场景来说是必需的。例如,如果你有一个对象,并且你想在另一个变量中创建一个该对象的副本,以便你可以对副本进行修改,而不会影响原始对象,那么深拷贝就是一种很好的选择。

变量赋值

变量赋值是指将一个变量的值赋给另一个变量。变量赋值可以是浅拷贝,也可以是深拷贝,具体取决于变量的类型。

如果变量是值类型变量,则变量赋值是浅拷贝。例如:

x = 1
y = x

y += 1

print(x)  # 1
print(y)  # 2

如果变量是引用类型变量,则变量赋值是浅拷贝。例如:

x = [1, 2, 3]
y = x

y[0] = 42

print(x)  # [42, 2, 3]
print(y)  # [42, 2, 3]

总结

在本文中,我们探讨了深拷贝和浅拷贝的概念,重点介绍了在 Python 中如何对对象进行拷贝。我们发现,深拷贝可以复制整个对象,包括其属性和值,而浅拷贝只复制对象的引用,而不是对象本身。这两种拷贝方式在编程中都有其独特的用途,并且在不同的情况下发挥着重要的作用。