python - 为什么 ['hello' ] 是 ['hello' ] 在 Python 中返回 False?

标签 python

<分区>

Possible Duplicate:
Python: Why is (“hello” is “hello”)?

['hello'] is ['hello']    # gives False

为什么?他们的id不一样。为什么元组或数字最终没有返回 False?

最佳答案

请考虑以下内容(Python 2.7.3,64 位):

>>> a = "Hello"
>>> b = "Hello"
>>> a is b
True

Python 实习短字符串 'Hello',只存储一次。这是一个实现细节,语言标准保证。它可能会在更长的字符串上失败:

>>> a = "this is a long string"
>>> b = "this is a long string"
>>> a is b
False

现在考虑一下:

>>> a = ["Hello"]
>>> b = ["Hello"]
>>> a is b
False

ab 是两个不同的对象。您可以使用 id() 进行检查:

>>> id(a)
33826696L
>>> id(b)
33826952L

这是一件好事TM 因为当你这样做的时候

>>> a[0] = "Goodbye"
>>> a
['Goodbye']
>>> b
['Hello']

但是,如果你这样做

>>> a = ["Hello"]
>>> b = a
>>> a is b
True
>>> a[0] = "Goodbye"
>>> b
['Goodbye']

因为 ab 是引用同一对象的名称 (id(a) == id(b))。最后,要表明即使你得到了

>>> a = ["Hello"]
>>> b = ["Hello"]
>>> a is b
False

字符串仍然保留并仅存储一次:

>>> id(a[0])
33846096L
>>> id(b[0])
33846096L

关于python - 为什么 ['hello' ] 是 ['hello' ] 在 Python 中返回 False?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12794560/

相关文章:

python - 使用 Db 数据填充 Django 表单字段数据

python - celery worker 尽管告诉他们不要这样做,但仍立即接受了 5 份工作

python - 为什么我在 Python 2.4 中使用 Unicode 数据时会出现 ASCII 编码错误,而在 2.7 中却不会?

python - 是否可以在 HTML 上嵌入和运行 Python 代码?

python - 列表理解头痛

python - 在 Linux 上升级 pip 时出错

python - 如何为django简单历史表设置manage=False

python - 鳕鱼和 python

python - SQLAlchemy automap - 向自动映射模型添加方法

python re如何在特定单词后留出空间?