Python参数传递(传值&传引用)详解编程语言
# 测试参数是传值还是传引用
def test(arg):
print( test before )
print(id(arg))
arg[1]=30 # 测试可变对象
# arg[3][2] = 16 # 测试嵌套类型
# arg = list(range(5))
print( test after )
print(id(arg))
return arg
change_loc = 1
if change_loc == 1:
# 传入可变对象
my_list = list(range(5))
print(my_list)
print(id(my_list))
test(my_list)
print(my_list)
print(id(my_list))
else:
# 传入不可变对象(元组中嵌套列表)
my_tuple = (3,5, abc ,my_list) # list(range(6)不能在元组中直接写创建列表可以替换成创建好的列表对象
print(my_tuple[3][2]) # 要测试修改的元组中列表的某个元素
print(id(my_tuple)) # 传入前元组引用
print(id(my_tuple[3])) # 传入前元组中列表引用
test(my_tuple)
print(my_tuple[3][2]) # 要测试修改后的元组中列表的某个元素
print(id(my_tuple)) # 传入后元组引用
print(id(my_tuple[3])) # 传入后元组中列表引用
# Python参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。
# 如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。
# 如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值 来传递对象。
总结:函数传值时如果传不可变对象,就不能修改原始值;传可变变量就能改原始值。如果传嵌套的数据类型(例如:( you ,[ Jack , Rose ])) 元组中包含列表或[{ Tom , Jim , Mary },{ Jack , Rose }] 列表中包含集合等)修改限制从外及内,直接相连的两层外层限制内层,不直接相连的没有直接影响。就拿元组包含列表为例:元组不能直接修改,因此元组内的各个数据的引用不能修改;列表支持修改,因此可以修改元组内列表中的数据,这并不影响元组本身的不可修改性,因为列表的引用没变;元组对其内列表中的数据没有直接影响力,其它嵌套结构分析类似!!!
测试结果:
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13011.html
cpython相关文章
- python 基尼系数_Python计算
- python skitlearn_Python sklearn
- Python 生成随机数_python建立随机数列表
- python定时器爬取豆瓣音乐Top榜歌名详解编程语言
- Python代码运行助手详解编程语言
- python从网络端口读取文本数据详解编程语言
- Python动态生成中文验证码详解编程语言
- Python删除指定目录下的过期文件详解编程语言
- python实现的代码行数统计代码详解编程语言
- Python抓取指定网页以及该网页上所有链接详解编程语言
- python自动裁剪图像详解编程语言
- 50行Python代码实现代理服务器详解编程语言
- python代码实例大小写转换,首字母大写,去除特殊字符详解编程语言
- Python模块——学习笔记详解编程语言
- Python中的字符串操作总结(Python3.6.1版本)详解编程语言
- python与MySQL详解编程语言
- [Python] 使用dict和set详解编程语言
- Python_day08_文件操作详解编程语言
- Python生成器、迭代器、可迭代对象详解编程语言
- python-yield详解编程语言
- Python-编码详解编程语言
- Python 冒泡排序详解编程语言
- python split(),os.path.split()和os.path.splitext()函数用法详解编程语言
- python远程创建文件夹上传文件详解编程语言
- 使用git bash 执行Python中文乱码详解编程语言
- python函数的万能参数详解编程语言
- Python高效编程技巧