赋值操作
赋值操作(如 b = a
)只是将变量 b
指向变量 a
当前指向的对象。这意味着 b
和 a
引用同一个对象。如果对象是可变的(如列表、字典),对对象的修改会反映在所有引用该对象的变量上。
a = [1, 2, 3]
b = a
a[0] = 99
print(a) # 输出: [99, 2, 3]
print(b) # 输出: [99, 2, 3]
在这个例子中,a
和 b
引用同一个列表对象。修改 a
的元素会同时影响 b
。
拷贝操作
拷贝操作会创建一个新的对象,新对象的内容与原对象相同,但它们是不同的对象。Python 提供了多种拷贝方式,包括浅拷贝和深拷贝。
浅拷贝
浅拷贝会创建一个新的对象,但新对象中的子对象仍然是原对象中子对象的引用。
import copya = [1, [2, 3], 4]
b = copy.copy(a)
a[0] = 99
a[1][0] = 88
print(a) # 输出: [99, [88, 3], 4]
print(b) # 输出: [1, [88, 3], 4]
在这个例子中,a
和 b
是不同的列表对象,但它们包含的子列表是同一个对象。因此,修改子列表会影响 a
和 b
。
深拷贝
深拷贝会创建一个新的对象,并且递归地拷贝原对象中的所有子对象。新对象和原对象是完全独立的。
import copya = [1, [2, 3], 4]
b = copy.deepcopy(a)
a[0] = 99
a[1][0] = 88
print(a) # 输出: [99, [88, 3], 4]
print(b) # 输出: [1, [2, 3], 4]
在这个例子中,a
和 b
是完全独立的列表对象,修改 a
不会影响 b
。
总结
-
赋值操作:只是将变量指向同一个对象,对对象的修改会影响所有引用该对象的变量。
-
浅拷贝:创建一个新的对象,但子对象仍然是原对象中子对象的引用。
-
深拷贝:创建一个新的对象,并且递归地拷贝所有子对象,新对象和原对象是完全独立的。
可变对象(Mutable Objects)
可变对象是指在创建后可以修改其内容的对象。常见的可变对象包括:
-
列表(List):可以通过索引和切片修改元素。
-
字典(Dictionary):可以通过键修改值。
-
集合(Set):可以添加和删除元素。
不可变对象(Immutable Objects)
不可变对象是指在创建后不能修改其内容的对象。常见的不可变对象包括:
-
整数(int)
-
浮点数(float)
-
字符串(str)
-
元组(tuple)
-
布尔值(bool