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

我试图使用如下所示的多重赋值来初始化变量,但是我对此行为感到困惑,我希望分别重新赋值列表,我的意思是b [0]和c [0]等于0。


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

a[0]=1

print(a)

print(b)

print(c)

结果是:[1、3、5] [1、3、5] [1、3、5]


那是对的吗?多重分配应该使用什么?有什么不同呢?


d=e=f=3

e=4

print('f:',f)

print('e:',e)

结果:('f:',3)('e:',4)


尚方宝剑之说
浏览 905回答 4
4回答

拉风的咖菲猫

咳嗽>>> a,b,c = (1,2,3)>>> a1>>> b2>>> c3>>> a,b,c = ({'test':'a'},{'test':'b'},{'test':'c'})>>> a{'test': 'a'}>>> b{'test': 'b'}>>> c{'test': 'c'}>>> 

侃侃无极

是的,这是预期的行为。a,b和c都设置为同一列表的标签。如果需要三个不同的列表,则需要分别分配它们。您可以重复显示列表,也可以使用多种方式之一复制列表:b = a[:] # this does a shallow copy, which is good enough for this caseimport copyc = copy.deepcopy(a) # this does a deep copy, which matters if the list contains mutable objectsPython中的赋值语句不复制对象-它们将名称绑定到对象,并且对象可以具有您设置的尽可能多的标签。在第一次编辑中,更改a [0],您将更新a,b和c都引用的单个列表中的一个元素。在第二次更改e中,您将e切换为其他对象的标签(4而不是3)。

眼眸繁星

在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也将更改。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python