2014-01-27 3 views
-2

Почему выход для следующего кода отличается питона,Поведение оператора «+ =» в питона

>>> A = [1,2,3] 
>>> B = A 
>>> B += [4] 
>>> print A,B 
Output: A = [1,2,3,4] , B = [1,2,3,4] 

Но если заменить B += [4] на B = B + [4] изменения выходных в:

>>> A = [1,2,3] , B = [1,2,3,4] 

Пожалуйста объяснить.

+4

Не снова, пожалуйста. – devnull

+0

Извините за то, что он перепрограммировал его, не смог найти его во время поиска. – rhn89

ответ

1

+= дополнено; для изменчивых типов он изменяет объект на месте.

Вы бы получить тот же эффект, если вы сделали:

B.extend([4]) 

Назначение B в A не создает копию, так B и A относятся к одному объекту, и любые изменения этого объекта видны через обе ссылки.

Когда же вы используете B = B + [4] вы создаете новый список объектов, и перепривязывают B к этому новому объекту. Поскольку создается новый объект списка, исходный объект списка (ранее ссылающийся на B и по-прежнему ссылающийся на A) не изменяется.

Фактически, используя прямую конкатенацию, вы создали мелкую копию исходного объекта списка.

Смежные вопросы