您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 字面值 >

python 值相同变量名不同内存地址相同吗

发布时间:2019-07-08 22:05 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部== (双=), a == b —— 检测两个变量的字面值是否相同

  is(操作符) a is b —— 检测两个变量存储的对象的内存存储地址是否相同

  ①值相同: X=1,Y=1时 —— 用 X == Y 检测这些整形数值的字面值是相同的,都是1,用 id(X) 、 id(y)(调用X或 调用Y),检测也都是指向同一地址11,这个值只占用一个内存地址,并且值相同的情况下,不管有多少个变量来调用这个值,都会指向这个同一值和这个值得内存地址,地址设为11,此时X=Y=1,共同读取内存地址11。

  ②值不同 :变化为X=1,Y=2 时 ——值不同(1、2)所以变量会分别指向不同值和不同内存地址,此时:X=1仍旧读取地址11,Y=2读取地址22。

  ③值相同:变化拓展为X=2,Y=2,Y=Z时——则X=Y=Z=2 读取地址为22。

  以上三种情况,X、Y、Z都是变量,1和2是值,11和22是内存地址。①和③里不同变量指向同一值并且内存地址也相同的机制称为:内存地址的共享引用。但是这种不同变量引用相同值得到相同内存地址的情况仅限于整形数值的字面值在0-255之间,和部分短字节中。这是因为0-255之间的值的地址已被Python预缓存在内存中,而当整形数值的字面值大于255时,即便不同变量引用相同字面值,但内存的分配的地址也绝对不可能相同。举例如下

  ④值相同:X=500,Y=500时 —— 用 X == Y 检测他们的字面值是相同的500 但是用id(X)、 id(y)或 X is Y检测他们的内存地址时,虽然字面值相同,但字面值500大于255,所以X与Y不共享内存地址,此时X内存地址为55,Y地址为66

  ⑤值不同 :变化为X=500,Y=600 时 —— 字面值不同且500、600都大于255,所以变量会分别指向不同内存地址,此时:X值=500已在④中声明过,所以X地址仍为55,Y因改变值则重新新建地址为77。

  用x == y ==z 检测他们字面值相同都是600 ,但因字面值600大于255,所以x与y与z不共享内存地址。用id(x)、 id(y)、 id(z)检测他们的内存地址也都不相同。此时:Y值=600已在⑤中声明过,所以此地址不变Y地址仍为77,X因改变值则重新建地址为88、z新建内存地址99。(并且由于Python的垃圾回收机制,每一个释放过的对象地址都可以被再次进行使用。所以⑥里X的地址也可以是之前④里Y已释放的的地址66,⑥里Z也可以使用X之前的内存地址55或Y之前使用的66)变量不存储值,而是绑定到值。当一个对象没有被绑定到任何一个变量时,它会在合适的时候被销毁,所占用的内存空间也会被回收。所以当一个新的对象被创建时,完全有可能分配到曾经回收的内存。简单可理解为对象地址是:先声明先占有,释放则回收。

http://halsoankan.com/zimianzhi/277.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有