Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

แก้ไข Object ภายใน Tuple ใน Python

บทนำ

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