列表内存分配和字符内存分配之间的差异


def f(b, a=[]):
a.append(b)
print('a : ', a)
f(1)
f(2)
# >> a : [1]
# >> a : [1, 2]

我认为变量"a"保留在内存中是因为GC或引用计数没有激活。

def f(b, a=''):
a += b
print('a : ', a)
f('1')
f('2')
# >> a : 1
# >> a : 2

这个函数的结果是不同的。变量a在每次调用函数时初始化。

调用函数后保留了dictionary、set、list的内存。但是int,string被清除。这是不同的内存分配系统吗?

原因是list是一个可变对象。在第一次调用中,a被初始化,在随后的调用中,它被引用。int和str是不可变的,如下所示:

>>> str1 = 'hello'
>>> id(str1)
1900958690736
>>> str1 = 'how r u'
>>> id(str1)   # is a different string now
1900958712176

为了实现您想要的目标,您可以使用:

def f(b, a=None):
if not a:
a = []
a.append(b)
print('a : ', a)
f(1) # a :  [1]
f(2) # a :  [2]

最新更新