首页 > 解决方案 > 为什么将值附加到列表比列表文字占用更多的存储空间?

问题描述

我提供了 4 种不同的方法来用相同的值填充这些列表:

var = 'a'
print('var id: ', id(var))                # var id:  1561191205488

lst1 = [var]
lst2 = ['a']
lst3 = []
lst3.append(var)
lst4 = []
lst4.append('a')

print(lst1.__sizeof__(), id(lst1[0]))      # 48 1561191205488
print(lst2.__sizeof__(), id(lst2[0]))      # 48 1561191205488
print(lst3.__sizeof__(), id(lst3[0]))      # 72 1561191205488
print(lst4.__sizeof__(), id(lst4[0]))      # 72 1561191205488

print(lst1 == lst4 == lst3 == lst4)        # True

我知道在 Python 中,所有内容都是通过引用传递的,在这些列表中,列表存储的实际值是对对象“a”的引用,它们都是相同的(正如我打印的 ID)。

我预计至少“lst2”和“lst4”以及“lst1”和“lst3”具有相同的内存使用量,但它们没有!似乎 append 方法所做的不仅仅是存储引用......

谁能告诉我这里发生了什么?

标签: pythonlist

解决方案


推荐阅读