簡體   English   中英

元組與python中的列表對象

[英]tuple vs list objects in python

有人可以解釋一下嗎?

>>> [] is []
False
>>> () is ()
True
>>> (1,) is (1,)
False

我明白我應該使用“==”代替“是”來比較這些值,我只是想知道為什么會這樣?

is基於對象身份。 IE,左右是同一個對象嗎?

在所有這些情況下,對象通常會有所不同(因為你有六個單獨的文字)。 但是,由於依賴於實現的實習,空元組是同一個對象。 如您所述,您絕不應該依賴此行為。

請注意,可變對象無法實現,這意味着第一個必須為false。

通過id比較時要小心。 如果一個對象是GC,那么id可以被重用!

>>> id([])==id([])
True

甚至

>>> id([1,2,3])==id(["A","B","C"])
True

可以這樣想:在第一種情況下,對於像元組這樣的不可變對象,如果它們是相同的,那么python實現可以安全地共享它們:

>>> a = ()
>>> b = ()
>>> a is b
True

現在考慮:

>>> a = []
>>> b = []
>>> a.append("foo")
>>> print a,b
['foo'] []

a和b不可能是同一個對象,因為修改a不應該修改b。

在最后一個例子中,您將回到不可變元組。 允許 Python實現使它們成為相同的對象,但不是必需的,在這種情況下它不會(它基本上是一個空間/時間權衡 - 如果你在程序中使用了很多(1,)如果他們被實習,可以節省內存,但是確定任何給定的元組是否是可以共享對象的(1,)都需要運行時間。

暫無
暫無

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

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