Я прошел через пару глубоких погружений в список Python и то, как управляется память, это меня действительно сбило с толку!
Вот первый пример,
~$ python >>> a = [1, 2, 3, 1, 1, 1] >>> print(id(a)) # 49375592 >>> print(id(a[0])) # 44792032 >>> print(id(a[1])) # 44792020 >>> print(id(a[2])) # 44792008 >>> print(id(a[3])) # 44792032 >>> print(id(a[4])) # 44792032 >>> print(id(a[5])) # 44792032

В соответствии с моим пониманием переменная (a) ссылается на ячейку памяти для сохраненных элементов списка. Элемент 1 повторяется 3 раза и указывает на одну и ту же ячейку памяти, индексы 1 и 2 указывают на разные ячейки памяти, потому что это разные элементы.
- Что, если я удалю элемент 1 из списка?
- Будет, он удалит все вхождения из списка?
- Будет ли list.remove (x) обрабатывать индекс также внутренне?
>>> a.remove(1) # [2, 3, 1, 1, 1]
Поскольку все элементы (1) указывают на одну и ту же ячейку памяти, но был удален первый элемент индекса, а не другие элементы. Согласно документации python, list.remove (x) удалит первый элемент, который встречается в списке. Но все же другие произошедшие элементы указывают на то же место в памяти.
Вот второй пример,
~$ python >>> b = [[]] * 3 # [[], [], []] >>> print(id(b)) # 49436632 >>> print(id(b[0])) # 49436712 >>> print(id(b[1])) # 49436712 >>> print(id(b[2])) # 49436712 >>> b[0].append(1) # [[1], [1], [1]]

b - это список, который имеет три пустых списка, указывающих на одно и то же место в памяти. Здесь мы добавляем элемент 1 к первому проиндексированному списку, но он добавляет все остальные пустые списки также потому, что весь список указывает на одно и то же место в памяти. . В этом случае это не обработка на основе индекса.
- Как Python управляет памятью с точки зрения удаления и добавления на основе приведенных примеров?
Вот третий пример,
~$ python >>> c = [[], [], []] >>> print(c) # [[], [], []] >>> print(id(c[0])) # 49376832 >>> print(id(c[1])) # 49376752 >>> print(id(c[2])) # 49376112
В третьем примере, вместо того, чтобы умножать пустой список, я просто добавил вручную, когда я пытаюсь проверить место в памяти каждого пустого списка, он указывает на другое место в памяти, а не на одно и то же.
Из второго примера: Действительно ли это тоже увеличивает количество памяти?

Чем это отличается от [[]] * 3 и [[], [], []]?
Спасибо за чтение ... почитайте еще один мой блог, Python - Secure Coding Guidelines.