list_a = [1, 2, 3, 4, 5]
list_b = list_a
list_a[0] = -10
print(list_a)
print(list_b)
[-10, 2, 3, 4, 5]
[-10, 2, 3, 4, 5]
一层深。 在级别1上进行修改不会影响其他列表。 使用 copy.copy()
或特定于对象的复制函数/复制构造函数。
import copy
list_a = [1, 2, 3, 4, 5]
list_b = copy.copy(list_a)
# 不会影响其他列表
list_b[0] = -10
print(list_a)
print(list_b)
[1, 2, 3, 4, 5]
[-10, 2, 3, 4, 5]
但是对于嵌套对象,在2级或更高级别上进行修改确实会影响其他对象!
import copy
list_a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
list_b = copy.copy(list_a)
# 会影响其他列表!
list_a[0][0]= -10
print(list_a)
print(list_b)
[[-10, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
[[-10, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
注意:你还可以使用以下内容来创建浅拷贝:
# 浅拷贝
list_b = list(list_a)
list_b = list_a[:]
list_b = list_a.copy()
完全独立的克隆。 使用 copy.deepcopy()
。
import copy
list_a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
list_b = copy.deepcopy(list_a)
# 不影响其他
list_a[0][0]= -10
print(list_a)
print(list_b)
[[-10, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
def __init__(self, boss, employee):
self. boss = boss
self.employee = employee
# 浅拷贝会影响嵌套对象
boss = Person('Jane', 55)
employee = Person('Joe', 28)
company = Company(boss, employee)
company_clone = copy.copy(company)
company_clone.boss.age = 56
print(company.boss.age)
print(company_clone.boss.age)
print()
# 深拷贝不会影响嵌套对象
boss = Person('Jane', 55)
employee = Person('Joe', 28)
company = Company(boss, employee)
company_clone = copy.deepcopy(company)
company_clone.boss.age = 56
print(company.boss.age)
print(company_clone.boss.age)