1.赋值运算符 =
: 赋值运算符用于创建一个对象的引用,而不是创建对象的副本。这意味着当你使用 =
将一个变量的值赋给另一个变量时,两个变量将引用相同的对象。因此,对其中一个变量所引用对象的修改将影响到另一个变量。
original_list = [1, 2, 3]
new_list = original_list # 赋值
new_list[0] = 99
print(original_list) # 输出 [99, 2, 3]
在这个例子中,new_list
和 original_list
引用相同的列表对象。
2..copy()
方法: .copy()
方法用于创建对象的浅拷贝,即创建一个新对象,该对象的值与原始对象相同,但它们是独立的,修改一个对象不会影响另一个对象。
original_list = [1, 2, 3]
new_list = original_list.copy() # 使用 .copy() 创建浅拷贝
new_list[0] = 99
print(original_list) # 输出 [1, 2, 3]
在这个例子中,new_list
是 original_list
的浅拷贝,修改 new_list
不会影响到 original_list
。
总的来说,当你想要创建一个新对象,而不希望修改该对象影响到原始对象时,使用 .copy()
方法是一个不错的选择。如果只是希望两个变量引用相同的对象,使用赋值运算符 =
就足够了。如果对象本身包含嵌套结构(例如列表中包含列表),使用 .copy()
可能需要考虑到深拷贝的问题。
深度拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在复制对象时的两种不同方式,主要区别在于它们处理嵌套对象时的方式。
浅拷贝(Shallow Copy):
import copy
original_list = [1, [2, 3], 4]
shallow_copy = copy.copy(original_list) # 修改嵌套对象
shallow_copy[1][0] = 99
print(original_list) # 输出 [1, [99, 3], 4]
- 浅拷贝创建一个新对象,该对象的内容是原始对象的一份副本。
- 对于嵌套对象(例如列表中包含列表),浅拷贝只复制最外层的对象,而不会递归复制内部的嵌套对象。内部嵌套对象的引用仍然是相同的。
- 在 Python 中,可以使用
copy
模块的copy()
方法来执行浅拷贝。
深度拷贝(Deep Copy):
import copy
original_list = [1, [2, 3], 4]
deep_copy = copy.deepcopy(original_list) # 修改嵌套对象
deep_copy[1][0] = 99
print(original_list) # 输出 [1, [2, 3], 4]
- 深度拷贝创建一个新对象,并递归地复制原始对象及其所有嵌套对象。
- 对于嵌套对象,深度拷贝会创建新的对象,而不是共享引用。这意味着修改深度拷贝的对象不会影响到原始对象。
- 在 Python 中,可以使用
copy
模块的deepcopy()
方法来执行深度拷贝。
总的来说,如果对象包含嵌套结构,并且你想要确保对副本的修改不会影响原始对象,那么使用深度拷贝是一个更安全的选择。如果你不需要递归地复制内部嵌套对象,或者你希望共享内部嵌套对象的引用,那么浅拷贝可能更合适。