函数形参的生存周期

原创 2018年04月17日 09:20:06

        今天遇到一个特别奇怪的事情,这样一个函数:

def fun(x, L=[]):
    for i in range(x):
        L.append(i * i)
    print(L)

fun(3)
fun(3, [1, 2, 3])
fun(3, [])
fun(2)

运行结果是什么呢?

[0, 1, 4]
[1, 2, 3, 0, 1, 4]
[0, 1, 4]

[0, 1]

最开始我以为是这样,后来一运行发现不对,结果是这样:

[0, 1, 4]
[1, 2, 3, 0, 1, 4]
[0, 1, 4]

[0, 1, 4, 0, 1]

为什么会是这个样子呢?深入查找资料才知道,其实python语言的函数在调用时,也是创建一个变量和对象,其形参中参数的生存周期是和函数的生存周期一样长,对于未明确赋值的形参,其对象一直存在,也就出现了第一行和第四行的结果。

vue生存周期

生存周期 {{ message }} var app = new Vue({ el: '#app', data: { m...
  • zw1046921704
  • zw1046921704
  • 2017-05-15 14:04:04
  • 177

C++中变量的生存周期

在C++中变量有以下两种生存周期:       #变量由编译程序在编译时给其分配存储空间(称为静态存储分配),并在程序执行过程中始终存在。这类变量的生存周期与程序的运行周期相同,当程序运行时,该变量...
  • darkxiaoming
  • darkxiaoming
  • 2017-04-18 20:57:04
  • 684

C++对象的生存周期

转自:http://blog.jobbole.com/99484/ 代码 代码说明: 类A,含构造函数和析构函数普通函数fun,函数体里新建了类A的局部自动对象FunObj和局部静态对象...
  • song_hui_xiang
  • song_hui_xiang
  • 2016-04-11 20:59:13
  • 1040

Asp.net页面生存周期

# 事件或方法 功能 描述    1 Init 事件 页面初始化 初始化设置。    2 LoadViewState 方法 加载视图状态 填充ViewState属性。    3 LoadPost...
  • smartsmile2012
  • smartsmile2012
  • 2016-06-06 18:51:10
  • 1098

c++类对象的生存周期

********************在这里我们会通过一个例子来给大家解释说明 #include using namespace std; class Test { public: Test(i...
  • lm9140802
  • lm9140802
  • 2017-09-22 22:44:11
  • 104

对象的生存周期对比

显示不同变量类型的定义与销毁先后顺序
  • DT_Zhangshuo
  • DT_Zhangshuo
  • 2017-09-20 19:23:03
  • 109

C语言变量生存周期

C语言变量在整个程序中的生命周期
  • essity
  • essity
  • 2015-12-16 18:17:18
  • 2402

C++中对象生存周期

在C++中,我们所使用的的对象都有严格的生存周期。所谓的对象生存周期是指对象从创建开始到被释放为止的时间。对于静态内存中存储的局部static对象、类static数据成员以及定义在任何函数之外的变量,...
  • yang20141109
  • yang20141109
  • 2015-12-21 17:39:05
  • 527

页面生存周期

 Posted on 2005-09-27 10:51 TomSun 阅读(622) 评论(0)  编辑 收藏 引用 网摘 所属分类: .NET ...
  • shankaipingo
  • shankaipingo
  • 2006-11-20 22:06:00
  • 610

Android-Activity生存周期

方法 说明 void onCreate(Bundle savedInstanceState) Called when the activity is starting. void ...
  • KJDynasty
  • KJDynasty
  • 2017-02-05 22:46:59
  • 239
收藏助手
不良信息举报
您举报文章:函数形参的生存周期
举报原因:
原因补充:

(最多只允许输入30个字)