python参数的引用传递
来源:互联网 发布:JS授权系统源码 编辑:程序博客网 时间:2024/05/17 04:21
记录python学习知识点Python在进行参数传递时,都是把参数的哈希值传给目标参数,即传递参数的值的内存地址,而不是值本身。除此之外,参数的引用传递需注意参数的数据类型,按数据类型的不同分为两大类: 1、不可改变的数据类型,如int、float、string、tuple。 2、可改变类型,如list、dictionary在对引用传递后参数进行自增自减操作后(不限定于常见的加减1),不可改变类型的参数会生成新的哈希值,而不是在原哈希值制定的内存地址中直接修改新数据,这跟java不同。如:
a=0 def test(A): A +=1 print(A) test(a) print(a)
输出结果为1和0,即A作为引用后的参数进行自增参数后,A的哈希值已改变。a作为被传递的参数,哈希值不变,所以a的值没有改变。对于可变类型列表和字典而言,传递后的参数在进行自增减元素时,有下面需注意的情形:1、列表:
a=[1,2] def test[A]: A +=[3] ### print(A) test(a) print(a)
输出结果一样,都是[1,2,3]。因为,列表在进行操作后,把新的数据直接在原来的储存位置上修改,并没有生成新的哈希值只想新的地址。把上面代码中的 ###行换成 A=A+[3]后,即
a=[1,2] def test[A]: A =A+[3] ### print(A) test(a) print(a)
输出结果为[1,2]和[1,2,3],因为A=A+[3]会把值取出来进行运算后把新数据放到新的地址中。所以需注意这里+=和=的不同2、字典
a = [] b = {'num':0, 'sqrt':0} for i in [1,2,3]: b['num'] = i b['sqrt'] = i * i a.append(b) print(a)
输出结果为:[{'num': 3, 'sqrt': 9}, {'num': 3, 'sqrt': 9}, {'num': 3, 'sqrt': 9}]跟我们想要的结果[{'num': 1, 'sqrt': 1}, {'num': 2, 'sqrt': 4}, {'num': 3, 'sqrt': 9}]不同。因为a中添加的元素b,都是b的引用,即b的哈希值,所以当b改变时,a也改变。以上知识点为个人粗浅总结,如有错误,请指正,谢谢。
阅读全文
0 0
- python参数的引用传递
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- Python的函数参数传递:传值?引用?
- (for..in)、Object.keys()和Object.getOwnPropertyNames(),for...of
- Java(5):基础:String、StringBuffer和StringBuilder的区别
- linux小练习5
- 反转单向链表的几种方法
- 深入理解java异常处理机制(目前最好的讲解异常的博文)
- python参数的引用传递
- Gym 100112CCookie Selection ,不停插入输出中位数
- elasticsearch为什么那么快
- 执行计划SQL写法差异改变之with子句
- 详解ANN
- 二分索引和斐波那契索引Java实现
- 笔记
- MySQL 第四篇:SQL查询强化使用
- 类加载问题