簡體   English   中英

為什么Python列表的行為會根據聲明的不同而有所不同?

[英]Why does Python list of lists behave differently depending on their declaration?

我試圖在Python中的另一個列表中創建一個列表。 我注意到,根據聲明,最終(外部)列表的行為有所不同。

我嘗試以兩種不同的方式創建列表列表。 兩種情況都給了我不同的結果。

#Case 1
def test():
    lt1 = lt2 = list()
    for i in range(0, 10):
        for j in range(0, 2):
            lt1.append(j);
        lt2.append(lt1);
        lt1 = [];
    print (lt2)

if __name__ == "__main__":
    test()
#Case 2
def test():
    lt1 = list()
    lt2 = list()
    for i in range(0, 10):
        for j in range(0, 2):
            lt1.append(j);
        lt2.append(lt1);
        lt1 = [];
    print (lt2)

if __name__ == "__main__":
    test()

在情況1中,輸出為[0,1,[...],[0,1],[0,1],[0,1],[0,1],[0,1],[0, 1],[0,1],[0,1],[0,1]]

在情況2中,輸出為[[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[ 0,1],[0,1],[0,1]]這是我實現的預期答案。

我想知道為什么第一個代碼段的行為不同。

這是因為第一行:

>>> a = b = []
>>> a
[]
>>> b
[]
>>> a is b
True
>>> a = []
>>> b = []
>>> a is b
False
>>> 

如果情況1中有一行,它包含相同的對象,因此:

>>> a = b = []
>>> a.append(1)
>>> a
[1]
>>> b
[1]
>>> 

兩行不會發生這種情況:

>>> a = []
>>> b = []
>>> a.append(1)
>>> a
[1]
>>> b
[]
>>> 

因此,僅僅因為案例1的第一行的ab是完全相同的對象,與第二種情況的第一行不同,它們是相同的值,但不同的idid(a) == id(b)a is b )。

暫無
暫無

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

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