python变量所指向的内存位置固定吗,python – 变量是名称,值还是内存位置?

声明x = 5有几件事情:

>创建一个值为5的int对象(如果已存在则找到该对象);

>创建名称x(或与标记的最后一个对象’x’取消关联);

>对新(或找到)的int对象的引用计数增加1;

>名称x与创建(或找到)值为’5’的对象相关联.

由于int对象是不可变的,因此效率可能为interned.字符串对象更有可能被实习.

这里有些例子:

>>> x=5 # discussed

>>> id(x) # the 'id' which in cPython is the memory address.

140246146681256

>>> y=x # now two names, 'x' and 'y' associated with that object

>>> id(y)

140246146681256 # same object

>>> z=5 # no guaranteed, likely the same object referred to by 'x' and 'y'

>>> id(z)

140246146681256 # id is the same! The object labeled 'x' was found and labeled 'z'

>>> del x # ref count to object '140246146681256' decreased by 1

>>> del y # same

>>> z

5

>>> id(z)

140246146681256 # same object but the names ''x' and 'y' no longer label it

考虑变量名称的最佳方法,如x = 5中的“x”作为标签.

可以使对象没有标签,例如在此列表中理解创建的5个单独的字符串对象:

>>> li=[str(x) for x in range(5)]

>>> li

['0', '1', '2', '3', '4']

然后,您可以创建与这5个对象的值独立匹配的对象:

>>> li2=list('012345') # longer list; completely different construction

>>> li2

['0', '1', '2', '3', '4', '5']

您可以获取其各自的内存地址(在cPython中)或唯一的ID地址:

>>> [id(x) for x in li]

[4373138488, 4372558792, 4372696960, 4373139288, 4373139368]

>>> [id(x) for x in li2]

[4373138488, 4372558792, 4372696960, 4373139288, 4373139368, 4372696720]

请注意,两个独立创建的匿名对象列表是相同的(在本例中为前5个).我特意使用字符串,因为它们更容易被内嵌…

所以想一想:x = 5时会发生两个不同的过程:

>创建对象(或者如果它是不可变的,实体的并且存在的话)>标记对象.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值