01/10/2018, 10:05

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
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

HK boy viết 12:10 ngày 01/10/2018

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]

Henry viết 12:12 ngày 01/10/2018

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

Đào An viết 12:11 ngày 01/10/2018

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

Henry viết 12:15 ngày 01/10/2018

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à.

Đào An viết 12:20 ngày 01/10/2018

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

Henry viết 12:13 ngày 01/10/2018

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

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

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

Đào An viết 12:07 ngày 01/10/2018

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

Bài liên quan
0