gpt4 book ai didi

python - 函数定义外的变量存储+内存中的变量位置?

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:18 26 4
gpt4 key购买 nike

示例函数:

 def extendList(val, list=[]):
list.append(val)
return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3

我一直在复习一些 python 面试问题,看来我在这里遗漏了一些基本知识。对于上面的脚本/函数,出于评论中所述的原因,我原本希望看到以下输出:

 list1 = [10] #because default is currently []
list2 = [123, []] #because not using function default of list
list3=[10, 'a'] #because function default list has had 10 appended

但是,list1 的结果是:

 list1 = [10, 'a'] #I don't understand.

我似乎错过了变量从内存中的函数传回时会发生什么?似乎 list1 从函数传回时将变量指向内存中的默认函数“list”参数。然后,这个默认函数“list”参数随着 list3 的调用而改变。最后,当打印 list1 和 list3 值时,它们指向内存中的同一个变量,因此打印出相同的结果?我离这里了吗?

我想我在这里回答了我自己的问题......

检查变量的内存地址时,我收到以下信息:

 print(hex(id(list1))) = 
0x10b49a518

print(hex(id(list2))) =
0x10b49a758

print(hex(id(list3))) =
0x10b49a518

有人可以确保我的解释正确吗?另外,我会把这个问题留给任何通过我措辞可怕的标题找到它的人 XD

最佳答案

list 的默认值是在定义 函数时创建的,而不是每次调用时创建的。因此,相同的列表从第一次和第三次调用传回,因此在最后打印所有内容时打印相同的(最终)值。正如@johnsharpe 指出的那样,如果您在调用之间打印值,您将看到预期的行为。

关于python - 函数定义外的变量存储+内存中的变量位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26342898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com