欢迎来到 常识词典网 , 一个专业的常识知识学习网站!

[ Ctrl + D 键 ]收藏本站

您所在的位置:首页 > 教育学习 > 百科

百科

PYTHON 的变量作用域与内存分配是什么?

分类: 百科 常识词典 编辑 : 常识 发布 : 04-01

阅读 :359

PYTHON 的变量作用域与内存分配是什么?def f(a, L=[]): L.append(a) print(id(L)) return Lprint (f(1))print (f(2))print (f(3,[4,3]))print (f(5))提问: 1、L和a的生命周期?什么时候销毁呢? 2、看样子是L在f调用完以后没有销毁。这个程序的运行结果显示出四次L的内存地址都是一样,为什么第三次是[4,3,3],第四次变成[1,2,5]2 个答案

答案 1:

第三次的地址肯定是和其他三次不同的,你可以确认下。这里L默认绑定到一个指定的对象,f外面L是无法访问的,但是默认绑定的这个[]一直存在,下次调用f(a)时,L还会绑定到这个[]上,除非用两个参数调用,L就会绑定到给出的参数上。

答案 2:

def f(a, L=[]): L.append(a) print(id(L)) return Lprint (f(1))print f.func_defaultsprint (f(2))print f.func_defaultsprint (f(3,[4,3]))print f.func_defaultsprint (f(5))print f.func_defaults这个代码应该能够说明:L的值在程序调用间是被保存在f.func_defaults这个元组里面了,所以能够在第一第二第四次调用间保存,或者说,类似于C里面的函数内静态变量;至于第三次调用,没有用默认参数。也可以参见这篇文章:effbot.org/zone...