Развёрнутое пояснение
1️⃣Список 𝚊 содержит два вложенных списка: [𝟷, 𝟸] и [𝟹, 𝟺].
2️⃣Вызов 𝚊.𝚌𝚘𝚙𝚢() создаёт новый внешний список 𝚋, но элементы 𝚋[𝟶] и 𝚋[𝟷] — это те же самые объекты, что и 𝚊[𝟶] и 𝚊[𝟷], не их копии.
3️⃣Когда выполняется 𝚊[𝟶].𝚊𝚙𝚙𝚎𝚗𝚍(𝟻), изменяется вложенный список, на который указывают и 𝚊[𝟶], и 𝚋[𝟶].
4️⃣Поэтому при печати 𝚋 видим [[𝟷, 𝟸, 𝟻], [𝟹, 𝟺]].
Почему это важно
Для полного копирования вложенных структур нужен 𝚌𝚘𝚙𝚢.𝚍𝚎𝚎𝚙𝚌𝚘𝚙𝚢(). Поверхностная копия через 𝚕𝚒𝚜𝚝.𝚌𝚘𝚙𝚢(), 𝚕𝚒𝚜𝚝(...) или срез [:] — частый источник багов с «призрачными» изменениями в якобы независимых данных.
Post #4625
872
- ✍ 3