Update a List which is in a Tuple

Hôm nay em có một thứ muốn chia sẻ với các bạn Python :smile:
Hãy thử dự đoán kết quả của đoạn code sau đây. (Dự đoán chứ không phải vác console lên test)

>>> t = (1, 2, [3, 4])
>>> t[2] += [50, 60]

A. t = (1, 2, [3, 4, 50, 60])
B. TypeError: 'tuple' object does not support item assignment
C. A, B, D sai hết mình tao đúng
D. A và B đúng

Kết quả là D.
Phần giải thích của tác giả

>>> dis.dis('s[a] += b')

1. Đưa s[a] lên TOS (Top Of Stack).
2. Gán TOS += b nếu TOS có thể thay đổi được (Ví dụ là list nên bước này pass)
3. Gán lại s[a] = TOS nếu TOS có thể thay đổi được. (Vì là tuple nên sẽ có lỗi)

Sau khi biết điều trên em đã rút ra một kinh nghiệm đó là Muốn nàng yêu ta, không nhất thiết ta phải thay đổi trái tim của nàng

1 Like

Hay đó!

Nên cho phần từ kết quả đến giải thích cho vào summary, kiểu như

Kết quả

[spoiler]chả có gì cả ahihi, làm tí mờ cho vui[/spoiler]

1 Like

Định chia sẻ thêm vài cái nữa :smiley:

1 Like

Là sao nhỉ, tức là 2 dòng code này có thể ra 2 kết quả á ??

có thể nói đơn giản là công việc đó nó chia làm 3 giai đoạn. Thì 2 giai đoạn đầu nó làm thành công, còn giai đoạn 3 thì bị lỗi. Vì Python là thông dịch mà. :smiley:

1 Like

Thế A cũng đúng à. M chạy thấy ra B

nhưng nó đã bị thay đổi :smiley: nó giống như

for ch in "Gr^k-T": print(zxocvixfienwr)

thì ch vẫn nhận giá trị “G” mà

2 Likes

Tưởng là tính chất 1 đoạn code ra 2 kết quả (undefined behavior) như C thì vỡ mặt :smiley:, chứ thế này thì ok

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?