Нет, в C/C++ совсем не такая фигня. Для кого-то, конечно, и ссылки gotcha, это субъективно. А здесь очень похоже на баг. Хотя пример этот давно известен, багов такого типа в Питоне не следует ожидать, наверняка есть какие-то разумные объяснения, но я их не могу придумать.
я думал, что в python x+=y должно быть точным аналогом x = x+y , включая эффекты identity ссылок. Удивлён, что это не так для списков. Ну, видимо тут Гвидо не выспался, и решил что оптимизация "изменяем переменную а не создаём новую" привычная для сишников должна быть и тут, несмотря на общую политику "x+=y это x+y"
Comments 6
Reply
Reply
Reply
Reply
>>> a = [1]
>>>id(a)
19859496
>>> a += [3]
>>> id(a)
19859496
Reply
Но gotcha не в этом.
x += y в Питоне это x = x.__iadd__(y), x = x.__add__(y) или x = y.__radd__(x). И такая схема fallbacks удобнее C++, где нужно определять всё.
Из этого определения и становится ясным результат.
Reply
Leave a comment