python共享引用(多个变量引用)示例代码
a = 3
b = a
先上图(图1)吧,大家一看就一目了然了:
变量名和对象,在运行赋值语句b = a之后,变量a,b都指向了对象3的内存空间.
假设这时执行 a = 'python', a将指向刚创建的字符串对象。
我们再来试试这种情况:
>>>list_1 = [1,2,3,4]
>>>list_2 = list_1
>>>list_2
>>>list_1[0] = 'python'
>>>list_2
[1,2,3,4]
['python',2,3,4]
从我的理解上来解释的话: list是一个类型对象,而对象里的每一个元素可以看成是变量,去引用了不同内存空间的对象list_1 = [1,2,3,4]是让list_1指向list的内存空间,list_2 = list_1时,他们将指向同一个内存空间。当List_1[0]改变指向时,list_2依然指向list对象的,所以看是改变list_1[0]的值,实际上是python通过list_1直接到内存空间去做了修改,list_2的指向没有任何变量。
或许这种结果并不是我们想要的。如果你不想要这样的现象发生,需要python对象拷贝,而不是创建引用。
如:
相关推荐
-
python复制与引用用法分析
本文实例讲述了python复制与引用用法.分享给大家供大家参考.具体分析如下: 简单复制是引用 a=[1,23,4] b=a #这是引用 b.append(2323) print(a,b) #([1, 23, 4, 2323], [1, 23, 4, 2323]) 使用copy.copy进行浅拷贝 import copy c=copy.copy(b)#拷贝 c.append(1) print(b,c)#([1, 23, 4, 2323], [1, 23, 4, 2323, 1]) list1=[
-
浅谈Python浅拷贝、深拷贝及引用机制
这礼拜碰到一些问题,然后意识到基础知识一段时间没巩固的话,还是有遗忘的部分,还是需要温习,这里做份笔记,记录一下 前续 先简单描述下碰到的题目,要求是写出2个print的结果 可以看到,a指向了一个列表list对象,在Python中,这样的赋值语句,其实内部含义是指a指向这个list所在内存地址,可以看作类似指针的概念. 而b,注意,他是把a对象包裹进一个list,并且乘以5,所以b的样子应该是一个大list,里面元素都是a 而当a对象进行了append操作后,其实,隐含的意思是,内存中的这个l
-
python中引用与复制用法实例分析
本文实例讲述了python中引用与复制用法.分享给大家供大家参考.具体分析如下: 在python中,任何不可变对象是传值的,而可变对象是传引用的. 不管是向函数传递参数或者是任何形式的对象复制来说,不可变对象(比如整数,字符串)被真正复制,而可变对象只是复制了一个对他们的引用,即在内存中只有一份对象,而引用两份. a=b 这样的赋值,就会创建对b的引用,对于象数字和字符串这样的不可变的对象,这种赋值实际是创建了b的一个副本 >>> a='hello' >>> b=a
-
Python中的引用和拷贝浅析
If an object's value can be modified, the object is said to be mutable. If the value cannot be modified,the object is said to be immutable. mutable 可变类型,例如 list,set,自定义类型(等价于C#中的引用类型): immutable 不可变类型,例如string,numbers等(等价于C#中的值类型): 一.引用和拷贝(references
-
从零学Python之引用和类属性的初步理解
Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python已经成为最受欢迎的程序设计语言之一.2011年1月,它被TIOBE编程语言排行榜评为2010年度语言.自从2004年以后,python的使用率是呈线性增长. Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言. 鉴于以上各种优点,忍不住对Python进行
-
python函数缺省值与引用学习笔记分享
复制代码 代码如下: import random, stringclass C(object): passdef dangerFunction(msg, l = [], b = {}, c = C()): print msg, '-'*10 print l, b, c.__dict__ l.append(1) b[random.choice(string.ascii_lowercase)] = '' c.__dict__[random.choice(strin
-
Python中在脚本中引用其他文件函数的实现方法
在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含的路径例如包的安装地址.所以如果要在当前脚本引用其他文件,除了将文件放在和脚本同一目录下,还有以下几种方法, 1. 将文件所在位置添加到sys.path中 import sys sys.path.insert(0, '/path/to/application/app/folder') # or sys.path.append('/path/to/application/a
-
python dict 字典 以及 赋值 引用的一些实例(详解)
最近在做一个很大的数据库方面的东东,要用到根据数值来查找,于是想到了python中的字典,平时没用过dict这个东东 用的最多的还是 list 和 tuple (网上查 用法一大堆) 看了一下创建字典的方法: 方法1: dict = {'name': 'earth', 'port': 80} 方法2: fdict = dict((['x', 1], ['y', 2])) 方法3: ddict = {}.fromkeys(('x', 'y'), -1) 都实验了一下这些方法,发现不好用,做不出来自
-
python 函数传参之传值还是传引用的分析
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-
-
Python引用传值概念与用法实例小结
本文实例讲述了Python引用传值概念与用法.分享给大家供大家参考,具体如下: Python函数的参数传值使用的是引用传值,也就是说传的是参数的内存地址值,因此在函数中改变参数的值,函数外也会改变. 这里需要注意的是如果传的参数类型是不可改变的,如String类型.元组类型,函数内如需改变参数的值,则相当于重新新建了一个对象. # 添加了一个string类型的元素添加到末尾 def ChangeList(lis): lis.append('hello i am the addone') prin
随机推荐
- Angularjs 自定义服务的三种方式(推荐)
- IOS自适配利器Masonry使用指南
- WordPress中用于获取及自定义头像图片的PHP脚本详解
- 《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
- js实现上下左右弹框划出效果
- 详解JavaScript基于面向对象之创建对象(1)
- asp.net GridView和DataList实现鼠标移到行行变色
- ThinkPHP模板IF标签用法详解
- C# WinForm窗口最小化到系统托盘
- Ajax请求和Filter配合案例解析
- Java 正则表达式详细介绍
- 使用Curl命令查看请求响应时间方法
- js实现不提交表单获取单选按钮值的方法
- listview改变字体大小实例讲解
- 二级域名原理以及程序,申请即可开通
- Php注入点构造代码
- Java编程经典小游戏设计-打砖块小游戏源码
- 详解Android沉浸式实现兼容解决办法
- php获取ajax的headers方法与内容实例
- Django rest framework基本介绍与代码示例