在研究python的is 时的一个小发现

#在研究is的时候我有一个颠覆我想象的发现
#我在查找资料的时候发现实验与理论上的结果不同,然后发现
#如果声明一个变量为一个数字或者字符串,与另一个变量的内容相等,那么这两个变量归为一个地址
num = 1
lum = 1
print(num is lum) # =>True
#用id查询地址
print(id(num), id(lum))# =>140704949384016 140704949384016
print()

#对其中一个变量名重新赋值
num = num * 2
print(num is lum) # =>False
print(id(num), id(lum)) # =>140704949384048 140704949384016
#实验结果不可思议,可以看到,原本两个相同地址的变量,地址发生了改变
#数值不变的变量lum的地址不变,而数值改变的变量num被分配了一个新的地址
#进一步探究,现在改变lum的值,使其与num的值相同
print()

lum = lum * 2
print(num is lum) # =>True
print(id(num), id(lum))# =>140704949384048 140704949384048
#果不奇然,当lum的值与num相同时,lum的地址则改变为了num的地址,而原本lum的地址则不翼而飞
#这很神奇,不得不说,python在我们看不到的很多地方做了很多优化
#那么谁主导这个地址呢,是lum?是num?还是单纯是这个值呢?
print()

#我们继续,首先重新声明一个变量
kum = 5
print(id(kum))# =>140704949384144
kum = 50
print(id(kum))# =>140704949385584
gum = 5
print(id(gum))# =>140704949384144
#可以发现,kum的值改变时,地址也随之改变。
#当新声明一个变量,且变量等于先前的那个值的时候,这个新变量的地址又与之前那个完全相同了。
#那么现在,我们可以认为是值主导这个地址了
#但在这个地址没有变量名的时候,里面是否还有这个值,我学疏才浅,不得而知。

希望有人能解答我最后一个问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值