Я новичок в Python, но я понимаю, что это не должно быть сделано таким образом, поэтому рассмотрите следующие фрагменты кода как чисто образовательные: -)
В настоящее время я читаю "Learning Python" и пытаюсь полностью понять следующий пример:
>>> L = [1, 2, 3, 4, 5]
>>> for x in L:
... x += 1
...
>>> L
[1, 2, 3, 4, 5]
Я не понял, было ли это поведение несколько связано с неизменностью числовых типов, поэтому я выполнил следующий тест:
>>> L = [[1], [2], [3], [4], [5]]
>>> for x in L:
... x += ['_']
...
>>> L
[[1, '_'], [2, '_'], [3, '_'], [4, '_'], [5, '_']]
Вопрос: что делает список неизменным в первом коде и изменено во втором?
Моя интуиция заключается в том, что синтаксис вводит в заблуждение и что:
-
x += 1
для целых чисел действительно означаетx = x + 1
(таким образом, присваивая новую ссылку) -
x += ['_']
для списка действительно означаетx.extend('_')
(тем самым меняя список на месте)