在python中变量是否被分配给内容地址_Python将多个变量分配给相同的值?列出行为...

如果您要使用C / Java / etc等语言的Python。家庭,它可能会帮助您停止将其a视为“变量”,而开始将其视为“名称”。

a,,b和c不是具有相等值的不同变量;它们是相同名称的不同名称。变量具有类型,身份,地址和类似的东西。

名称没有任何名称。值当然可以,并且对于相同的值,您可以有很多名称。

如果给Notorious B.I.G.热狗,* Biggie Smalls并Chris Wallace有一个热狗。如果将的第一个元素更改a为1,则b和的第一个元素为c1。

如果要知道两个名称是否在命名同一对象,请使用is运算符:

>>> a=b=c=[0,3,5]

>>> a is b

True

然后您问:

有什么不同呢?

d=e=f=3

e=4

print('f:',f)

print('e:',e)

在这里,您将名称重新绑定e到value 4。这不会影响名称d,不会f以任何方式影响。

在以前的版本中,您分配给a[0],而不是a。因此,从的角度来看a[0],您正在重新绑定a[0],但是从的角度来看a,您正在就地更改它。

您可以使用该id函数,该函数为您提供代表对象身份的唯一编号,以准确查看哪个对象是哪个对象,即使在is无济于事的情况下:

>>> a=b=c=[0,3,5]

>>> id(a)

4473392520

>>> id(b)

4473392520

>>> id(a[0])

4297261120

>>> id(b[0])

4297261120

>>> a[0] = 1

>>> id(a)

4473392520

>>> id(b)

4473392520

>>> id(a[0])

4297261216

>>> id(b[0])

4297261216

请注意,该a[0]名称已从4297261120更改为4297261216-现在它是另一个值的名称。并且b[0]现在也是该相同新值的名称。这是因为a和b仍在命名同一对象。

在幕后,a[0]=1实际上是在列表对象上调用方法。(等效于a.__setitem__(0, 1)。)因此,它根本没有真正绑定任何东西。这就像打电话my_object.set_something(1)。当然,该对象可能是为了执行此方法而重新绑定实例属性,但这并不重要。重要的是您没有分配任何东西,只是在改变对象。与相同a[0]=1。

user570826询问:

如果有的话 a = b = c = 10

这与以下情况完全相同a = b = c = [1, 2, 3]:您有三个具有相同值的名称。

但是在这种情况下,值是an int,并且ints是不可变的。在这两种情况下,你可以重新绑定a到一个不同的值(例如,a = "Now I'm a string!"),但不会影响原来的值,这b与c将仍然是名称。不同的是,有一个列表,你可以更改值[1, 2, 3]到[1, 2, 3, 4]这样做,例如a.append(4); 因为那实际上是在更改值b和c的名称,所以b现在将b [1, 2, 3, 4]。无法将值更改10为其他任何值。10永远是10岁,就像克劳迪娅(Claudia)一样,吸血鬼也永远是5岁(至少直到被Kirsten Dunst取代之前)。

*警告:请勿给臭名昭著的BIG热狗。黑帮说唱僵尸永远不要在午夜之后喂饱。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值