博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 传参问题
阅读量:4552 次
发布时间:2019-06-08

本文共 637 字,大约阅读时间需要 2 分钟。

下面代码会输出什么:

def f(x,l=[]): for i in range(x): l.append(i*i) print l f(2) f(3,[3,2,1]) f(3)

答案

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

呃?

第一个函数调用十分明显,for循环先后将0和1添加至了空列表l中。l是变量的名字,指向内存中存储的一个列表。第二个函数调用在一块新的内存中创建了新的列表。l这时指向了新生成的列表。之后再往新列表中添加0、1、2和4。很棒吧。第三个函数调用的结果就有些奇怪了。它使用了之前内存地址中存储的旧列表。这就是为什么它的前两个元素是0和1了。

不明白的话就试着运行下面的代码吧:

l_mem = []l = l_mem # the first call for i in range(2): l.append(i*i) print l # [0, 1] l = [3,2,1] # the second call for i in range(3): l.append(i*i) print l # [3, 2, 1, 0, 1, 4] l = l_mem # the third call for i in range(3): l.append(i*i) print l # [0, 1, 0, 1, 4]

转载于:https://www.cnblogs.com/imindy/p/8405680.html

你可能感兴趣的文章
freebsd 断电 单用户模式恢复
查看>>
一道java笔试题
查看>>
设计师交互推荐-提高设计水平的50套精美的PSD模板
查看>>
《机器学习技法》---AdaBoost算法
查看>>
敏捷开发综述
查看>>
sed简单使用(四)选择性显示
查看>>
广告模式
查看>>
tar 的–exclude参数,实现不包括某些文件(转)
查看>>
Visual C++ 2008入门经典 第十章标准模板库(二)
查看>>
【算法笔记】B1054 求平均值
查看>>
Jmeter4.0---- 测试数据说明(17)
查看>>
大家好
查看>>
Python2与Python3用法区别
查看>>
Nagios监控ganglia的指标
查看>>
线程池的毒丸方法实现线程池的配比热切换
查看>>
Linux Namespace : UTS
查看>>
十三:MVC-HTML辅助方法-输出表单
查看>>
Python全栈工程师(while、占位符)
查看>>
Python全栈工程师(每周总结:1)
查看>>
datagrid.celltips.js
查看>>