Mình nghĩ bạn VuVanChung trả lời đúng rồi. Mình chỉ có 1 comment nho nhỏ như sau:
-
Gần như mọi thứ trong Python đều là mutable (trừ một số immutable - tuple, frozenset,…) và trong câu hỏi của bạn thì biến x là một mutable object.
-
Trong vòng lặp for, giá trị index (value) sẽ được thực hiện phép gán. Tổng quan hơn với iterable objects, index và value đều là mutable objects:
In [1]: x = [10, 20, 30]
In [2]: for a, b in enumerate(x):
...: a += 1
...: b += -1
...: print(a, b)
...:
1 9
2 19
3 29
Trong câu hỏi của bạn, index ở đây lại chính là phần tử của list x, và phần tử đó cũng được thực hiện phép gán. Ví dụ ở vòng lặp đầu tiên:
for x[-1] in x: # x = [0, 1, 2, 3]
Python interpreter sẽ thực hiện gán x[-1] = 0, và x khi đó thành: [0, 1, 2, 0], và thực hiện vòng lặp tiếp theo. Ở vòng lặp cuối, x = [0, 1, 2, 2] vì ở vòng lặp trước x[-1] = 2.