Список модификаций в цикле

Я новичок в Python, но я понимаю, что так делать не следует, поэтому, пожалуйста, рассматривайте следующие фрагменты кода как чисто образовательные :-)

Сейчас я читаю ' Изучение 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, '_']]

Вопрос: что делает list не изменился в первом коде и изменился во втором?

Моя интуиция подсказывает, что синтаксис вводит в заблуждение и что:

  • x += 1для целого числа действительно означает x = x + 1(таким образом присваивая новую ссылку)
  • x += ['_']для списка на самом деле означает x.extend('_')(таким образом, изменяя список на месте)
11
задан icecrime 28 March 2012 в 12:06
поделиться