0
Я не знаю, является ли это ошибка, или я неправильно семантический смысл * лексемы в массивах:Инициализация матрицы python3
>>> arr = [None] * 5 # Initialize array of 5 'None' items
>>> arr
[None, None, None, None, None]
>>> arr[2] = "banana"
>>> arr
[None, None, 'banana', None, None]
>>> # right?
...
>>> mx = [ [None] * 3 ] * 2 # initialize a 3x2 matrix with 'None' items
>>> mx
[[None, None, None], [None, None, None]]
>>> # so far, so good, but then:
...
>>> mx[0][0] = "banana"
>>> mx
[['banana', None, None], ['banana', None, None]]
>>> # Huh?
Является ли это ошибка, или я получил неправильный семантический значение маркера __mult__
?
Итак, то, что именно смысл '*' фишку? Если он копирует ссылку на объект, тогда я должен ожидать, что в первой части при передаче 'arr [2] =" banana "список должен быть' ['banana', 'banana', 'banana ',' banana ',' banana '] ', а не выше. – user2804578
О, просто натолкнулся на ответ [в другом месте на StackOverflow] (http://stackoverflow.com/questions/9658459/initializing-matrix-in-python-using-0xy-creates-linked-rows/9658522#9658522) Однако, Я считаю довольно странным, что токен '*' не имеет такого же значения в списке, как и для других типов элементарных данных. – user2804578
На самом деле это имеет то же значение. Просто для неизменных типов выполнение таких операций, как «копирование», всегда создает новый объект, которому присваивается одно и то же значение, тогда как изменяемые объекты просто копируют свою ссылку. Вот еще несколько хороших чтений о том, что означает, что тип неизменен. http://stackoverflow.com/questions/8056130/immutable-vs-mutable-types-python – Ben