繁体   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