python中的参数传递和返回值
2015-06-07 19:38
651 查看
python中的参数传递类似java,有着自己的内存回收机制,这和C++有着很大的差别。
1.函数的参数传递:
从上面的结果可以看出,python的函数传递是引用传递,因此,在函数体内修改对象内容会导致函数外面的对象内容改变。
这个对于一些内置类型,如int,float是不成立的。
注意,如果在函数内对传进来的参数做del操作是不会对实际对象产生影响的,因为del删除的是该引用,而实际对象的引用数至少为1,所以不会被回收。
2.函数的返回:
可以看出,函数返回的也是对象的引用,而对象此时的引用计数为1,所以不会被内存回收。
这在C++中是肯定错误的,但是python有自己的内存回收机制,因此是没问题的。
3.总结:
python和java类似,没有指向对象的指针,每个对象都是靠引用对其进行操作,因此在函数传递和函数返回时,通过对同一个对象的引用实现了对同一个对象的操作。当函数调用结束时,对象的内存不会消失,但是引用本身会被回收。
1.函数的参数传递:
>>> a = [1, 2, 3] >>> def fun(a): for i in a: print i a.append(4) >>> fun(a) 1 2 3 44807792 >>> a [1, 2, 3, 4]
从上面的结果可以看出,python的函数传递是引用传递,因此,在函数体内修改对象内容会导致函数外面的对象内容改变。
这个对于一些内置类型,如int,float是不成立的。
注意,如果在函数内对传进来的参数做del操作是不会对实际对象产生影响的,因为del删除的是该引用,而实际对象的引用数至少为1,所以不会被回收。
2.函数的返回:
>>> def fun(): a = [1, 2, 3] print id(a) return a >>> a = fun() 44806192 >>> id(a) 44806192
>>> def fun(): a = 1 print id(a) return a >>> a = fun() 34243104 >>> id(a) 34243104
可以看出,函数返回的也是对象的引用,而对象此时的引用计数为1,所以不会被内存回收。
这在C++中是肯定错误的,但是python有自己的内存回收机制,因此是没问题的。
3.总结:
python和java类似,没有指向对象的指针,每个对象都是靠引用对其进行操作,因此在函数传递和函数返回时,通过对同一个对象的引用实现了对同一个对象的操作。当函数调用结束时,对象的内存不会消失,但是引用本身会被回收。
相关文章推荐
- Nim连接到Python
- 使用PythonCharm简易安装python统计包及UnicodeDecodeError,numpy.distutils.systeminfo.blas/lapacknotfounderror
- 使用GDAL/OGR包+python将CSV转成shapefile并投影
- python列表解析和生成器表达式
- python进程池剖析(一)
- 菜鸟学习python笔记
- 手机控制电脑的一种思路(Python实现)
- Ubuntu下给Python2安装PIL(Python_Image_Library)
- Python3获取网页内容
- python编码问题总结
- Python图像处理(9):Hu矩
- python的zip函数
- Python定制类
- python中实现二分查找,插入排序,归并排序,快速排序
- Python图像处理(8):边缘检测
- python并行计算的简单实现--pp
- 使用virtualenv搭建python3开发环境
- Python类与继承
- python与内建函数重名
- python动态加载是否影响性能