【问题标题】:Difference between list and char memory allocationlist 和 char 内存分配的区别
【发布时间】:2020-11-30 14:15:23
【问题描述】:
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,字符串被清除了。 是不同的内存分配系统吗?

【问题讨论】:

  • 简而言之:list.append 就地修改对象。但是 Python 字符串是不可变的,+= 创建并分配了一个新值。
  • @KonradRudolph 非常感谢!

标签: python memory memory-management


【解决方案1】:

原因是列表是一个可变对象。在第一次调用时 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]

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 2021-04-15
    • 2012-01-13
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多