Python 官方文档:入门教程 => 点击学习
学习python首先要了解这三个的关系,变量、对象、引用、类型这个要记住:类型存在于对象、变量通过引用链接上对象变量在赋值的时候才创建,可以引用任何类型的对象、并且使用之前比许进行赋值。 <center> 例如:》》
学习python首先要了解这三个的关系,变量、对象、引用、类型
这个要记住:类型存在于对象、变量通过引用链接上对象
变量在赋值的时候才创建,可以引用任何类型的对象、并且使用之前比许进行赋值。
<center>
例如:
》》:a = 3
其实是完成了三个事情:
1.创建了一个int类型的对象3
2.创建了一个名为a的对象
3.将变量名a与int类型的对象3相连接
变量实际上是到对象内存空间的一个指针,变量是一个系统表的元素,拥有指向对象的链接空间。
对象是分配的一块内存,有足够的空间去表示他们所代表的的值
引用是自动形成的从变量到对象的指针
记住:每一个对象都有两个东西,对象类型和引用的计数器 这连个东西决定了是否自动回收。
对象的垃圾回收:每个对象保持了一个引用计数器,计数器记录了当前指向该对象的引用的数目,一旦这个计数器为0,这个对象的内存空间就会被自动回收。
import sys
print(sys.getrefcount(L)) 查看引用对少次
getrefcount(...)
getrefcount(object) -> integer
Return the reference count of object. The count returned is generally
one higher than you might expect, because it includes the (temporary)
reference as an argument to getrefcount().
思考:
a = "3"
b = a
a = "spam"
这样输出b会是多少?
变量a引用了spam对象的内存空间,所有值钱对象3肯定是还有引用的,那么谁用呢就是变量b
a = 3
b = a
a = a + 3
L = [1,2,3]
L2 = L
L = 24
此时L2依然不会变,如果写下面的语句替换L=24
L[0] = 24
这样就更改了L2的值,因为列表L引用的是对象、L[0]是在原处修改了引用值,L与L2是共享引用的,所以L修改了第一个对象的引用,L2也会改变
更好的理解共享引用
==,is
is 是比较实现应用的指针,如果不用变量名,引用相同指针,那么返回true。
第一个题:A和B最初共享与引用,但是后来B重新指向了另一个对象,所以不影响A
第二题:A和B最初共享引用,但是列表支持在原处修改,所以赋值B[0]就是在原处修改了重新指向别的地方的指针,那么A肯定也更改了,区别就在于B[0]就是在原处修改。
第三题,其实B=A[:]是创建了两个list,A和B,即创建了两个列表A,B,两个拥有相同值的不同列表对象,所以B[0]在原处修改,不会影响A
--结束END--
本文标题: Python-变量对象引用
本文链接: https://www.lsjlt.com/news/190142.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0