在 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 = []
有什么区别(如果有的话)
【问题讨论】:
前者将两个不同的空列表分配给a
和b
。后者将同一空列表的引用分配给a
和b
。如果您随后修改其中一个列表,则前者只会显示其中一个变量的变化,而后者将同时显示两者。
@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()
仍然会让a
和b
引用同一个对象,而这样做:
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的主要内容,如果未能解决你的问题,请参考以下文章