返回
8 月进步系列分享(二):浅谈深浅拷贝与变量赋值
前端
2024-01-03 23:01:40
前言:值传递与引用传递
在 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 中如何对对象进行拷贝。我们发现,深拷贝可以复制整个对象,包括其属性和值,而浅拷贝只复制对象的引用,而不是对象本身。这两种拷贝方式在编程中都有其独特的用途,并且在不同的情况下发挥着重要的作用。