【发布时间】:2018-10-06 19:58:23
【问题描述】:
我无法理解以下行为。我正在创建 2 个字符串,并使用 is 运算符进行比较。在第一种情况下,它的工作方式不同。在第二种情况下,它按预期工作。什么原因当我使用逗号或空格时,它显示False 与is 比较,当没有使用逗号或空格或其他字符时,它给出True
Python 3.6.5 (default, Mar 30 2018, 06:41:53)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'string'
>>> b = a
>>> b is a
True
>>> b = 'string'
>>> b is a
True
>>> a = '1,2,3,4'
>>> b = a
>>> b is a
True
>>> b = '1,2,3,4'
>>> b is a
False
是否有可靠的信息说明为什么 python 以不同的方式解释字符串?我了解最初,a 和 b 指的是同一个对象。然后b 得到一个新对象,仍然b is a 说True。理解这种行为有点令人困惑。
当我使用“字符串”执行此操作时 - 它会产生相同的结果。当我使用 '1,2,3,4' 时出了什么问题 - 它们都是字符串。案例 1 和案例 2 有什么不同?即is 运算符为字符串的不同内容产生不同的结果。
【问题讨论】:
-
我了解 == 的工作原理。我不是在这里指==。它完全是。检查我的代码并查看帖子参考更改,它仍然产生相同的结果。
-
@deceze 这个问题不是关于身份和值检查,而是关于 Python 缓存字符串的不同方式(字符串实习)。
-
@khelwood 这看起来像是一个微妙不同的问题。为什么
is操作符在执行相同操作但字符串内容不同时会改变结果。 -
是的,这个问题有些问题。如果你只有
a = '1,',然后b = '1,',那么它们显然是不同的对象。与哪些字符串被实习有关的事情有些神秘。
标签: python python-3.x identity python-internals