值传递和引用传递

參考地址:http://www.dataguru.cn/thread-489552-1-1.html

python的值传递不会改变传入參数的值,而引用传递传入的是一个地址。有点相似c的指针。在运行完毕之后会改变传入地址所指的值。

值传递类型例如以下:

上面的代码仅仅是将a的值作为參数传递进去。程序运行完之后a的值并未改变

1
2
3
4
5
6
= 1
def change_integer(a):
    = + 1
    return a
print change_integer(a)
print a

结果:

2

1

[Finished in 0.1s]

引用传递的类型例如以下:

1
2
3
4
5
6
7
= [123]
def change_list(b):
    b[0]= b[0]+1
    return b
 
print change_list(b)
print b

结果:

[2, 2, 3]

[2, 2, 3]

[Finished in 0.1s]

而这里将b的地址传递进去之后,程序运行完之后b的值也随之改变。


怎样解决 变量 : 由 引用传递 变为 值传递??

方案例如以下:

1
2
3
4
5
6
7
8
9
import copy
 
= [123]
def change_list(b):
    b[0]= b[0]+1
    return b
 
print change_list(copy.deepcopy(b))
print b

结果:

[2, 2, 3]

[1, 2, 3]

[Finished in 0.1s]

FROM:http://my.oschina.net/repine/blog/601288

Python 值传递和引用传递的更多相关文章

  1. [转]Python中函数的值传递和引用传递

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  2. python中变量在内存中的存储与地址关系解析、浅度/深度copy、值传递、引用传递

    ---恢复内容开始--- 1.变量.地址 变量的实现方式有:引用语义.值语义 python语言中变量的实现方式就是引用语义,在变量里面保存的是值(对象)的引用(值所在处内存空间的地址).采用这种方式, ...

  3. python的值传递与引用传递

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  4. 深入理解python中函数传递参数是值传递还是引用传递

    深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...

  5. python的参数传递是值传递还是引用传递?都不是!

    [写在前面] 参考文章: https://www.cnblogs.com/spring-haru/p/9320493.html[偏理论,对值传递和引用传递作了总结] https://www.cnblo ...

  6. python的参数传递是值传递还是引用传递??

    函数参数传递机制,传值和引用的是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(pa ...

  7. 错误处理: Python值传递和引用传递的问题

    1.插入数据库的时候报错110, 提示columns数量少于插入的值内容. 2.核对了下栏目并没有少,打印出插入的值,看看值是不是多了. 查看了下,确实第二次值的时候长度边长了,第二次把第一次的部分值 ...

  8. python函数值传递还是引用传递

    c/c++中有值传递引用传递的区别.但是python中是值传递还是引用传递呢?首先看python中对变量的定义 "python中变量是指向某个内存的, 而内存中的内容是不可变的." ...

  9. Java中引用类型变量,对象,值类型,值传递,引用传递 区别与定义

    一.Java中什么叫做引用类型变量?引用:就是按内存地址查询       比如:String s = new String();这个其实是在栈内存里分配一块内存空间为s,在堆内存里new了一个Stri ...

随机推荐

  1. rest_framework-序列化-总结完结篇

    #rest_framework 序列化 from rest_framework import serializers #serilizers.Serializer serializers.ModelS ...

  2. java 类和对象1

    编写一个Java应用程序,该程序中有3个类:Lader.Circle和主类A.具体要求如下:Lader类具有类型为double的上底.下底.高.面积属性,具有返回面积的功能,包括一个构造方法对上底.下 ...

  3. 高德地图和canvas画图结合应用(一)

    现在重构web项目的时候发现,以前项目中是高德画基站的扇区的时候,通过计算点来画多边形,在站点的数量比较多的时候,会增加请求,同时计算扇区的时候有大量的计算,这样会极度浪费服务器的性能,所以对这块进行 ...

  4. tomcat web容器工作原理

    Tomcat的模块结构设计的相当好,而且其Web 容器的性能相当出色.JBoss直接就使用了Tomcat的web容器,WebLogic的早期版本也是使用了Tomcat的代码.Web容器的工作过程在下面 ...

  5. 测试cnblog文章内部JS

    添加几个按钮 行内js 写法: <button onclick="javascript:alert('行内js')">行内js</button> 注意:al ...

  6. CF732F Tourist Reform(边双联通)

    题意 在一张有向图中,设 ri 为从点 i 出发能够到达的点的数量. 定义有向图的“改良值”为 ri 的最小值. 现给出一张无向图,要求给每条边定一个方向,使产生的有向图“改良值”最大. 输出 最大改 ...

  7. cal---显示日历

    cal命令用于显示当前日历,或者指定日期的日历. 语法 cal(选项)(参数) 选项 -l:显示单月输出: -3:显示临近三个月的日历: -s:将星期日作为月的第一天: -m:将星期一作为月的第一天: ...

  8. struts2文件上传需要注意的

    ① 必须封装三个字段:文件.文件类型.文件名,而且这三个字段的名字的前面几个字母是一样的 如: private File upload; private String uploadContentTyp ...

  9. 函数指针的转换 & C的注意点

    再让我们看看<signal.h>中声明的signal函数void (*signal(int, void(*)(int)))(int)首先,用typedef简化,typedef void ( ...

  10. Service绑定模式

    Service绑定模式      使用绑定的Service能够实现组件与Service的通信. 组件与被绑定的Service能够不归属于同一个应用程序.因此通过绑定Service能够实现进程间通信. ...