(python)对象的引用
2016-12-19 20:10
302 查看
对比下列两个例子:
例子1:
结果:a= 12 b= 10
a+2后,b仍然是10
例子2:
结果:aa= [1, 2, 4, 3] bb= [1, 2, 4, 3]
aa增加一个元素3后,bb也增加了元素3
例子1和例子2为什么会出现两种不同情况呢?
我们再用id()函数打印出变量a、b、aa、bb的内存地址:
例子1:
结果:
31815632
31815632
a= 12 b= 10
31815584
31815632
说明a、b两个变量一开始指向的是同一个内存地址。而a=a+2后,a变量便不再是之前的那个a变量,而指向了另一个内存地址。但b变量还是之前的那个a变量。
例子2:
结果:
38994120
38994120
aa= [1, 2, 4, 3] bb= [1, 2, 4, 3]
38994120
38994120
刚开始aa、bb指向的是同一个内存地址。aa.append(3)后,aa和bb仍然指向的是同一个内存地址,所以aa增加一个元素后,bb也跟着增加了一个元素
例子1:
a=10 b=a a=a+2 print "a=",a,"b=",b
结果:a= 12 b= 10
a+2后,b仍然是10
例子2:
aa=[1,2,4] bb=aa aa.append(3) print "aa=",aa,"bb=",bb
结果:aa= [1, 2, 4, 3] bb= [1, 2, 4, 3]
aa增加一个元素3后,bb也增加了元素3
例子1和例子2为什么会出现两种不同情况呢?
我们再用id()函数打印出变量a、b、aa、bb的内存地址:
例子1:
a=10 b=a print id(a) print id(b) a=a+2 print "a=",a,"b=",b print id(a) print id(b)
结果:
31815632
31815632
a= 12 b= 10
31815584
31815632
说明a、b两个变量一开始指向的是同一个内存地址。而a=a+2后,a变量便不再是之前的那个a变量,而指向了另一个内存地址。但b变量还是之前的那个a变量。
例子2:
aa=[1,2,4] bb=aa print id(aa) print id(bb) aa.append(3) print "aa=",aa,"bb=",bb print id(aa) print id(bb)
结果:
38994120
38994120
aa= [1, 2, 4, 3] bb= [1, 2, 4, 3]
38994120
38994120
刚开始aa、bb指向的是同一个内存地址。aa.append(3)后,aa和bb仍然指向的是同一个内存地址,所以aa增加一个元素后,bb也跟着增加了一个元素
相关文章推荐
- python 引用,拷贝,对象回收,弱引用
- 弱引用的用途:在底层C++对象被上层python脚本对象使用时(转)
- 跟老齐学Python之深入变量和引用对象
- 对python变量和对象引用的探讨
- [零基础学Python]深入变量和引用对象
- python笔记(五) - 获取对象的引用
- python引用在函数传参时的体现以及可变与不可变对象的对比
- python赋值和拷贝----一切皆对象,参数皆引用
- python赋值和拷贝----一切皆对象,参数皆引用
- Python 变量 对象 引用
- Python 初体验之 对象的引用和拷贝
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- python中的对象和引用
- python对象的复制问题,按值传递?引用传递?
- python中的对象拷贝示例 python引用传递
- python函数是引用传递(对可变对象而言)
- python中的对象和引用 分类: python基础学习 2013-10-30 16:20 264人阅读 评论(0) 收藏
- python 对象拷贝——浅拷贝和深拷贝 之函数传递——值传递还是引用传递?
- Python对象引用和del删除引用
- python中对象引用计数的相关问题