Вот мой минимальный пример:
Код: Выделить всё
ls = [bitarray('0'), bitarray('0')]
ls[0] ^= bitarray('1')
print(ls)
> [bitarray('1'), bitarray('0')]
ls = [bitarray('0')]*2
ls[0] ^= bitarray('1')
print(ls)
> [bitarray('1'), bitarray('1')]
ls = [bitarray('0'), bitarray('0')]
ls[0] = ls[0] ^ bitarray('1')
print(ls)
> [bitarray('1'), bitarray('0')]
- Почему второй блок кода дает другой результат, чем первый? Я думал, что, возможно, операция * просто дублирует ссылку (что объясняет, почему были изменены оба элемента списка), но я не могу воспроизвести поведение, используя только (целые) 1 и 0.
- Почему расширение ls[0] ^= bitarray('1') до ls[0] = ls[0] ^ bitarray('1') возвращает вывод к тому же состоянию, что и первый блок кода? Я понял, что ^= — это просто сокращение последнего выражения.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -operation