为了账号安全,请及时绑定邮箱和手机立即绑定

Python将多个变量分配给相同的值?列出行为

Python将多个变量分配给相同的值?列出行为

尚方宝剑之说 2019-12-16 11:24:13
我试图使用如下所示的多重赋值来初始化变量,但是我对此行为感到困惑,我希望分别重新赋值列表,我的意思是b [0]和c [0]等于0。a=b=c=[0,3,5]a[0]=1print(a)print(b)print(c)结果是:[1、3、5] [1、3、5] [1、3、5]那是对的吗?多重分配应该使用什么?有什么不同呢?d=e=f=3e=4print('f:',f)print('e:',e)结果:('f:',3)('e:',4)
查看完整描述

4 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

咳嗽


>>> a,b,c = (1,2,3)

>>> a

1

>>> b

2

>>> c

3

>>> a,b,c = ({'test':'a'},{'test':'b'},{'test':'c'})

>>> a

{'test': 'a'}

>>> b

{'test': 'b'}

>>> c

{'test': 'c'}

>>> 


查看完整回答
反对 回复 2019-12-16
?
侃侃无极

TA贡献2051条经验 获得超10个赞

是的,这是预期的行为。a,b和c都设置为同一列表的标签。如果需要三个不同的列表,则需要分别分配它们。您可以重复显示列表,也可以使用多种方式之一复制列表:


b = a[:] # this does a shallow copy, which is good enough for this case

import copy

c = copy.deepcopy(a) # this does a deep copy, which matters if the list contains mutable objects

Python中的赋值语句不复制对象-它们将名称绑定到对象,并且对象可以具有您设置的尽可能多的标签。在第一次编辑中,更改a [0],您将更新a,b和c都引用的单个列表中的一个元素。在第二次更改e中,您将e切换为其他对象的标签(4而不是3)。


查看完整回答
反对 回复 2019-12-16
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

在python中,一切都是对象,也是“简单”的变量类型(int,float等)。


更改变量值时,实际上是更改了它的指针,如果在两个变量之间进行比较,则会比较它们的指针。(要清楚,指针是物理计算机内存中存储变量的地址)。


结果,当您更改内部变量值时,将更改它在内存中的值,并且会影响指向该地址的所有变量。


例如,当您这样做时:


a = b =  5 

这意味着a和b指向内存中包含值5的相同地址,但是在执行以下操作时:


a = 6

它不会影响b,因为a现在指向包含6的另一个存储位置,而b仍然指向包含5的存储地址。


但是,当您这样做时:


a = b = [1,2,3]

a和b再次指向相同的位置,但是不同之处在于,如果更改列表值之一:


a[0] = 2

它会更改a所指向的内存的值,但是a仍指向与b相同的地址,结果b也将更改。


查看完整回答
反对 回复 2019-12-16
  • 4 回答
  • 0 关注
  • 903 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信