list 和 char 内存分配的区别
Difference between list and char memory allocation
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。
调用函数后字典、集合、列表的内存仍然存在。但是 int,字符串被清除了。
是不同的内存分配系统吗?
原因是列表是一个可变对象。在第一次调用时 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]
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。
调用函数后字典、集合、列表的内存仍然存在。但是 int,字符串被清除了。 是不同的内存分配系统吗?
原因是列表是一个可变对象。在第一次调用时 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]