Bằng cách nào đó sau khi làm điều nàyhành vi vòng lặp rất kỳ diệu: liệt kê các thay đổi nhận dạng. Điều gì đang xảy ra?
list2 = [x for x in range(10)]
list1 = [ x for x in range(10,20)]
for k, list1 in enumerate([list1,list2]):
for number, entry in enumerate(list1):
print number, entry
đột nhiên id(list2)==id(list1)
đánh giá là True? Cái quái gì đang xảy ra? trong khi vòng lặp chạy không có vẻ như trường hợp đầu ra đầu tiên như mong đợi:
0 10, 1 11, 2 12, ... 0 0, 1 2, 2 3, ...
thứ hai mặc dù mang lại cho:
0 0, 1 1, 2 2 ...
Làm thế nào có thể như vậy?
Đơn giản chỉ cần thay đổi mã để:
list2 = [x for x in range(10)]
list1 = [ x for x in range(10,20)]
Gets thoát khỏi hành vi này.
for k, NEWVAR in enumerate([list1,list2]):
for number, entry in enumerate(list1):
print number, entry
nhưng nên vòng lặp không tạo ra một biến mới trong namescope của vòng lặp? – pindakaas
okay những gì địa ngục nó không thats điên – pindakaas
@pindakaas: không, biến không giới hạn trong phạm vi vòng lặp. xem http://stackoverflow.com/questions/3611760/scoping-in-python-for-loops – Railslide