История изменений
Исправление
WitcherGeralt,
(текущая версия)
:
В питоне разница между переменной и ссылкой на нее не всегда очевидна
Дело не в переменных и ссылках, переменная — всего лишь имя, никакой магии тут нет. Просто в питоне есть изменяемые и неизменяемые типы.
а вот с передачей аргумента создалась бы копия переменной
На самом деле нет. Смотри:
In [1]: def f(A, B, C, D):
...: print(id(A), id(B), id(C), id(D))
...: A += 1
...: print(id(A), id('bar'))
...:
In [2]: a, b, c, d = 1, 2, 1000, 'bar'
In [3]: print(id(a), id(b), id(c), id(d))
9302176 9302208 139775249962960 139775279152880
In [4]: f(a, b, c, d)
9302176 9302208 139775249962960 139775279152880
9302208 139775279152880
Здесь ты можешь видеть как в функцию передаются ровно те объекты, которые ты передал, а никакие не копии. Также ты тут можешь наблюдать кеши.
А __iadd__
(+=
) — это вообще фейк.
Исходная версия
WitcherGeralt,
:
В питоне разница между переменной и ссылкой на нее не всегда очевидна
Дело не в переменных и ссылках, переменная — всего лишь имя, никакой магии тут нет. Просто в питоне есть изменяемые и неизменяемые типы.
а вот с передачей аргумента создалась бы копия переменной
На самом деле нет. Смотри:
In [1]: def f(A, B, C, D):
...: print(id(A), id(B), id(C), id(D))
...: A += 1
...: print(id(A), id('bar'))
...:
In [2]: a, b, c, d = 1, 2, 1000, 'bar'
In [3]: print(id(a), id(b), id(c), id(d))
9302176 9302208 139775249962960 139775279152880
In [4]: f(a, b, c, d)
9302176 9302208 139775249962960 139775279152880
9302208 139775279152880
Здесь ты можешь видишь как в функцию передаются ровно те объекты, которые ты передал, а никакие не копии. Так же ты тут можешь наблюдать кеши.
А __iadd__
(+=
) — это вообще фейк.