Bỏ qua để đến nội dung

Chained assignment - a = b = []

# Chained assignment
a = b = []
# Sửa a
a.append(1)
# b cũng thay đổi?!
print(a) # [1]
print(b) # [1] ❌

What the Python?! Sửa ab cũng đổi?! 😱

a = b = []
# Tương đương:
# temp = []
# a = temp
# b = temp
# a và b trỏ đến CÙNG list
print(a is b) # True
x = y = 10
x = 20 # Tạo object MỚI, reassign x
print(x) # 20
print(y) # 10 ✅ Không ảnh hưởng
# List
a = b = []
a.append(1)
print(b) # [1] ❌
# Dict
x = y = {}
x["key"] = "value"
print(y) # {'key': 'value'} ❌
a = []
b = []
a.append(1)
print(a) # [1]
print(b) # [] ✅
a = []
b = a.copy()
a.append(1)
print(a) # [1]
print(b) # [] ✅

Chained assignment:

  • a = b = [] → Cùng object
  • ⚠️ NGUY HIỂM với mutable
  • ✅ Assign riêng hoặc copy

Pattern:

# ❌ Tránh
a = b = []
# ✅ Làm
a = []
b = []