簡體   English   中英

Python中多個空列表的初始化

[英]Initialization of multiple empty lists in Python

在 Python 3 中將一堆變量初始化為獨立的空列表的正確方法是什么?

>>> (a, b) = ([],)*2
>>> a.append([2,3])
>>> a
[[2, 3]]
>>> b
[[2, 3]]
>>> b.append([2,3,])
>>> b
[[2, 3], [2, 3]]
>>> a
[[2, 3], [2, 3]]


>>> (a, b) = ([]  for _ in range(2))
>>> a.append([2,3])
>>> a
[[2, 3]]
>>> b
[]
>>> b.append([2])
>>> b
[[2]]
>>> a
[[2, 3]]

為什么第一次嘗試不在內存中獨立分配ab

為什么第一次嘗試沒有在內存中獨立分配a、b? 因為它們引用內存中的相同地址。

(a, b) = ([],)*2
print(id(a))
print(id(b))
# 4346159296
# 4346159296
(a, b) = ([]  for _ in range(2))
print(id(a))
print(id(b))
# 4341571776
# 4341914304

您可以將它們初始化如下。

a = b = []
a = [2]
b = [2, 3]
print(a, b)

為什么第一次嘗試沒有在內存中獨立分配a、b?

因為您使用相同的列表來定義多個變量。 它是這樣的:

list1 = []
var1, var2 = list1, list1

在第二種情況下,您使用的是每次迭代都會創建新列表的理解。

你可以看看這個例子

list1 = [1, 2, 3]
a = [val for val in list1]
b = [val for val in list1]
c, d = ([list1]) * 2
print(f"{a=}")
print(f"{b=}")
print(f"{c=}")
print(f"{d=}")
print("Append something")
a.append("a append")
list1.append("list1 append")
print(f"{a=}")
print(f"{b=}")
print(f"{c=}")
print(f"{d=}")

輸出:

a=[1, 2, 3]
b=[1, 2, 3]
c=[1, 2, 3]
d=[1, 2, 3]
Append something
a=[1, 2, 3, 'a append']
b=[1, 2, 3]
c=[1, 2, 3, 'list1 append']
d=[1, 2, 3, 'list1 append']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM