在 Python 中是 a, b, = 0, 0 在语义上等同于 a = b = 0

Posted

技术标签:

【中文标题】在 Python 中是 a, b, = 0, 0 在语义上等同于 a = b = 0【英文标题】:In Python is a, b, = 0, 0 semantically identical to a = b = 0 【发布时间】:2021-11-19 05:05:57 【问题描述】:

问题同上:我很好奇a, b, = [], []a = b = []有什么区别(如果有的话)

【问题讨论】:

前者将两个不同的空列表分配给ab。后者将同一空列表的引用分配给ab。如果您随后修改其中一个列表,则前者只会显示其中一个变量的变化,而后者将同时显示两者。 @TomKarzes 谢谢,有没有更简单的方法可以让我写出像 a, b, c, d, e= [], [], [], [], [] 这样的东西将每个变量分配给一个新的不同列表? a, b, c, d, e = [], [], [], [], [] 有什么问题?也许您应该问一下您是否真的需要这么多变量,或者您的任务是否可以使用其他数据结构(例如 dict 或列表列表)来解决。 如果您要添加 5 个或更多列表,那么您可能会考虑切换到列表列表。然后可以通过list_of_lists = [[] for _ in range(n)]list_of_lists 设置为n 空子列表。 【参考方案1】:

不同之处在于:

l = [1, 2, 3]
a = b = l.copy()

仍然会让ab 引用同一个对象,而这样做:

l = [1, 2, 3]
a, b = l.copy(), l.copy()

不会。

例子:

>>> l = [1, 2, 3]
>>> a = b = l.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> a[0] = 100
>>> a
[100, 2, 3]
>>> b
[100, 2, 3]
>>> 

>>> a, b = l.copy(), l.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> a[0] = 100
>>> a
[100, 2, 3]
>>> b
[1, 2, 3]
>>> 

你的例子也可以证明:

>>> a = b = []
>>> id(a)
1666229809344
>>> id(b)
1666229809344
>>> a, b, = [], []
>>> id(a)
1666230083712
>>> id(b)
1666230079296
>>> 

使用a = b = [] 使两个变量引用同一个对象。

【讨论】:

谢谢,有没有更简单的方法让我写出类似 a, b, c, d, e= [], [], [], [], [] 的东西,同时仍然分配每个变量到一个新的不同列表? 也许使用列表理解:a, b, c, d, e = [[] for _ in range(5)] @GoldinGuy 你看到消息了吗?

以上是关于在 Python 中是 a, b, = 0, 0 在语义上等同于 a = b = 0的主要内容,如果未能解决你的问题,请参考以下文章

c语言中a^b和a&b分别是什么意思啊

(?!a)0 是啥?在 Java 正则表达式中是啥意思?

c语言中a=a^b;这个语句是怎么计算的,举个例子说明

r在数学中是指啥?

[算法]不用第三个数交换2个数的位置

C语言:求出a中各相邻两个元素的和,并将这些和存放在数组 b中