我提供了 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
Run Code Online (Sandbox Code Playgroud)
我知道在Python中所有内容都是通过引用传递的,并且在这些列表中,列表存储的实际值是对对象“a”的引用,并且它们都是相同的(正如我打印的ID一样)。
我预计至少“lst2”和“lst4”以及“lst1”和“lst3”具有相同的内存使用量,但事实并非如此!看来追加方法的作用不仅仅是存储引用......
谁能告诉我这里发生了什么事吗?