# 测试参数是传值还是传引用

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‘}] 列表中包含集合等)修改限制从外及内,直接相连的两层外层限制内层,不直接相连的没有直接影响。就拿元组包含列表为例:元组不能直接修改,因此元组内的各个数据的引用不能修改;列表支持修改,因此可以修改元组内列表中的数据,这并不影响元组本身的不可修改性,因为列表的引用没变;元组对其内列表中的数据没有直接影响力,其它嵌套结构分析类似!!!

测试结果:

pythondef元组参数传递_Python参数传递(传值传引用)相关推荐

  1. python 变量传值传引用 区分

    传值:strings tuples numbers 传引用: list dict python的变量都可以看成是内存中某个对象的引用.(变量指向该内存地址存储的值) 1.python中的可更改对象和不 ...

  2. Java工作笔记-Java函数参传值传引用问题

    目录 基本概念 代码与实例 源码打包下载 基本概念 最近的系统中,Java程序和C++程序混着,很多程序都是用Java搞的,不得不稍微研究下Java的细节,其中很关键的一点,就是如何在Java中传引用 ...

  3. java中调方法传值传引用

    基本类型与引用类型,传递形参时都是传递实际参数的一个copy(或者称之为拷贝),基本类型传递实际值的copy,引用类型传递引用的copy,引用类型中如果修改形参的属性则会影响实际参数 笔记: publ ...

  4. java面试题八 传值传引用

  5. php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解

    在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助. php中引用的用法: 1. 变量的引 ...

  6. php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解_PHP教程

    在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助. php中引用的用法: 1. 变量的引 ...

  7. java map 参数传递_Java参数传递分析

    Java之中的参数传递,只有按值传递!!! 传递类型 按值传递:就是把原来的参数的值,拷贝一份,将这个拷贝的值修改,而原来的旧的值不会修改. 引用传递:就是将参数的地址拿来使用,不去拷贝,直接在这个地 ...

  8. 传指针和传指针引用的区别(指针和引用的区别)

    一.传指针和传指针引用的区别 相同点: 都是地址的概念.指针指向一块内存,它的内容是所指内存的地址:而引用则是某块内存的别名. 不同点: 1. 指针是一个实体,而引用仅是个别名 2. 引用只能在定义时 ...

  9. 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)

    传值调用最显著的特征就是被调用的函数内部对形参的修改不影响实参的值. 引用调用是将实参的地址传递给形参,使得形参的地址就是实参的地址. (对于python而言,普通的实参传个变量(或常量)进去就相当于 ...

最新文章

  1. IDEA JNI配置
  2. winform datagridview控件使用
  3. MySQL---数据库从入门走向大神系列(十二)-构建MVC项目
  4. am335x mysql_Ubuntu下编译ARM平台QtEmbedded的MySQL和MySQL插件
  5. java操作Linux 调用shell命令,shell脚本
  6. VBA 自动关闭 弹出的对话框 + VBA错误捕捉
  7. OTL翻译(4) -- otl_stream类
  8. Hadoop中各组件的作用
  9. ca42a_demo_c++_new_delete表达式
  10. 3D打印机DIY之六------G代码命令
  11. SCI 论文常用词汇 持续更新中。。。
  12. PS套索工具改变头发颜色
  13. java中根遍历后根遍历构造,恳求大佬指点!!!首先标明空子树的先根遍历序列建立一棵二叉树...
  14. 什么是API,开发人员该如何使用它们?
  15. 深度学习(3)--ResNetResNext
  16. 【mysql】mysql 常用建表语句
  17. 在TCP端口筛选只允
  18. Matlab基于VQ的语者识别系统(GUI界面)
  19. 160429 vue.js 2 台灣小凡(体验 vuejs 2之随笔)
  20. 图谱实战 | 为什么我们需要医学知识图谱?

热门文章

  1. java通过桥访问excel_通过jdbc-odbc桥来访问excel文件
  2. oracle如何获取异常,ORACLE-函数异常处理(EXCEPTION)
  3. Tomcat帮助文档翻译 未完成
  4. eclipse修改字体大小
  5. 最长上升子序列nlogn算法
  6. 人称代词和Be动词的现在简单肯定式_1
  7. 2017.7.27 排列perm 思考记录
  8. 舞台灯恒流芯片 无频闪无噪音 多路共阳 调光深度0.1% 方案分享
  9. 一键换ip命令_软网推荐:高效命令行备份更简单
  10. linux 内存泄露检测工具——valgrind