Возможно, мне что-то не хватает о предполагаемом поведении списка, но почему происходит следующее:Расширение списка списков в Python?
x = [[],[]]
y = [[]] * 2
print x # [[],[]]
print y # [[],[]]
print x == y # True
x[0].extend([1])
y[0].extend([1])
print x # [[1],[]], which is what I'd expect
print y # [[1],[1]], wtf?
Я бы предположил, что оператор *
делает что-то неожиданное здесь, хотя я не совсем уверен, что. Кажется, что что-то происходит под капотом, что делает исходные x и y (до вызова продления) на самом деле не равными, хотя оператор ==
и repr
оба выглядят так, как будто они были одинаковыми.
Я только натолкнулся на это, потому что хотел предварительно заполнить список пустых списков размера, определенного во время выполнения, а затем понял, что он не работает так, как я себе представлял. Я могу найти лучший способ сделать то же самое, но теперь мне любопытно, почему это не сработало. Это Python 2.5.2 BTW. У меня нет новой версии, поэтому, если это ошибка, я не уверен, что она уже исправлена.
Я знаю, что добавляет, я только что придумал надуманный пример ради вопроса. –