python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
来源:互联网 发布:复杂网络建模的研究生 编辑:程序博客网 时间:2024/06/05 04:23
函数参数传递本质上和变量整体复制一样,只是两个变量分别为形参a和实参b。那么,a=b后,a变了,b值是否跟着变呢?这取决于对象内容可变不可变
首先解释一下,什么是python对象的内容可变不可变?
python的变量是无类型的,如n=1 #变量n无类型(n相当于指针),其指向int数据类型的值,这个值是int类型。
所以,python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。
举个列子,
不可变如,a=5后,a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a。
而可变如,la=[1,2,3,4]后,la[2]=5则是将list la的第二个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
那么,python函数的参数传递:
可变类型,则类似c++的引用,如list、dict。如fun(la),则是将la真正的传过去,修改后fun外部的la也会受影响
而不可变类型,则类似c++的值传递,如int。如fun(a),传递的只是a的值,没有影响a对象本身。比如在fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。
讲的很细:http://blog.csdn.net/winterttr/article/details/2590741
同样的道理,python变量复制也是一样,a=b:
变量间复制,可变对象是引用,不可变是值copy(新生成值空间,不是变量对象空间)
样例代码如下:
a={1:'a',2:'b',3:'c'}
b=a
a[4]='d'
print a,b
#输出:{1: 'a', 2: 'b', 3: 'c', 4: 'd'} {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
a=10
b=a
a=6
print a,b
#输出: 6 10
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- python函数参数是值传递还是引用传递:取决于对象内容可变不可变
- python参数传递问题与可变/不可变对象
- python中可变和不可变对象(复值,拷贝,函数值传递)
- JavaScript 函数参数传递到底是值传递还是引用传递 (精华)
- JS 参数传递到底是值传递还是引用传递?
- Java中参数传递是值传递,还是引用传递
- Java参数传递到底是值传递还是引用传递?
- Final关键字修饰变量时,是引用变量的值不可变,还是对象的值不可变呢?
- Java中函数参数的传递是值传递还是引用传递
- Java中函数参数的传递是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- 【Java】函数中的参数传递是“引用传递”还是“值传递”?
- Java中函数参数的传递形式是值传递 还是引用传递
- Java中函数参数的传递是值传递还是引用传递
- CloudStack 4.0.2 vRouter导致重启后状态不正常
- 无需第三个变量实现两个数的交换
- 下载进度条的设计
- 循环遍历文件夹
- 第一篇博客
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- 3.1.5 Enhancements
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
- 数据库操作:添加、插入、更新语句
- 操作系统重点双语阅读 - 上下文切换 Context Switch
- BOOL,int,float,指针变量 与“零值”比较的if语句
- ibatis获取主键自动增长ID(Oracle/MSSQL/mysql),取得刚插入的ID编号
- XE4 base64 编码 方法
- Java桌面程序打包成exe——可在没装Java的电脑上安装或运行