Сохраняет ли список python объект или ссылку на объект?

Размер целых 24 байта и размер char составляет 38 байт,, но когда я вставляю в список, размер списка не отражают точный размер объекта, который я вставляю. Итак, теперь я блуждающий список держит ссылку на объект, и объект хранится где-то в памяти.

>>> sys.getsizeof(1)
24
>>> sys.getsizeof('a')
38
>>> sys.getsizeof([])
72
>>> sys.getsizeof([1])
80
>>> sys.getsizeof(['a'])
80
>>> sys.getsizeof('james') 
42
>>>

Ответ 1

Все значения в Python вставляются в бокс, они не сопоставляются с типами или размерами машин. А именно, все в реализации CPython - это PyObject struct.

http://docs.python.org/2/c-api/structures.html#PyObject

Итак, теперь я бродячий список держит ссылку на объект, и объект хранится где-то в памяти.

Список также представляет собой PyObject, содержащий ссылки sequence ссылок на другие элементы PyObject для элементов списка. Список выделен на кучу Python, который управляется сборщиком мусора Python.

Ответ 2

Все в python хранится как ссылка. Итак, ваше предположение верно.

>>> id(1)
10274744
>>> a = [1]
>>> id(a)
11037512
>>> id(a[0])
10274744
>>> sys.getsizeof(1)
24
>>> sys.getsizeof(a)
80

Вы видите, что a [0] указывает на id/адрес 1. Это показывает, что в списке сохраняется только ссылка на объект.