Chained assignment - a = b = []
Hiện tượng lạ
# 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 a mà b cũng đổi?! 😱
Giải thích
Chained assignment = Cùng object
a = b = []
# Tương đương:
# temp = []
# a = temp
# b = temp
# a và b trỏ đến CÙNG list
print(a is b) # TrueVới immutable - OK
x = y = 10
x = 20 # Tạo object MỚI, reassign x
print(x) # 20
print(y) # 10 ✅ Không ảnh hưởngVới mutable - NGUY HIỂM
# List
a = b = []
a.append(1)
print(b) # [1] ❌
# Dict
x = y = {}
x["key"] = "value"
print(y) # {'key': 'value'} ❌Cách đúng
✅ Assign riêng
a = []
b = []
a.append(1)
print(a) # [1]
print(b) # [] ✅✅ Hoặc copy
a = []
b = a.copy()
a.append(1)
print(a) # [1]
print(b) # [] ✅Tóm tắt
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 = []Last updated on
Python