Python 里的可变与不可变:赋值到底复制了什么

三个函数先分清

a = [1, 2]
b = a          # 同一对象
c = a[:]       # 浅拷贝
import copy
d = copy.deepcopy(a)   # 深拷贝

print(id(a) == id(b))  # True
print(id(a) == id(c))  # False

什么时候会踩坑

  • 函数默认参数写成 def f(x, items=[]),列表在多次调用间共享
  • 嵌套列表浅拷贝后,内层仍然共享

记住一句话:赋值不复制,拷贝才复制。