บทนำ
Tuple ใน Python เป็น immutable (แก้ไข element ไม่ได้) แต่ถ้า element เป็น mutable object เช่น list สามารถแก้ไขภายใน object นั้นได้โดยตรง
ตัวอย่างโค้ด
my_tuple = (45, 67, [35, 66, 74], 89, 100)
print("Tuple เดิม:", my_tuple)
# แก้ไข element ใน list ที่อยู่ index 2 ของ tuple
my_tuple[2][1] = 63
print("หลังแก้ไข:", my_tuple)
ผลลัพธ์
Tuple เดิม: (45, 67, [35, 66, 74], 89, 100) หลังแก้ไข: (45, 67, [35, 63, 74], 89, 100)
คำอธิบาย
- Tuple เอง immutable:
my_tuple[2] = ...จะ Error - แต่
my_tuple[2]คือ list (mutable) →my_tuple[2][1] = 63ทำได้ - นี่คือ "shallow immutability" - tuple เก็บ reference ไม่สามารถเปลี่ยน reference ได้ แต่อbject ที่อ้างอิงอาจเปลี่ยนได้
ตัวอย่างเพิ่มเติม
t = ([1,2], [3,4]) t[0].append(99) print(t) # ([1, 2, 99], [3, 4]) - list แรกเปลี่ยนได้ # แต่การแทนที่ list ทั้งตัว error # t[0] = [99] # TypeError!
Best Practice
หลีกเลี่ยงการใส่ mutable objects ใน tuple หากไม่ต้องการพฤติกรรมนี้ ใช้ tuple(tuple(x) for x in mutable_seq) แปลงทุกอย่างเป็น immutable