可能重复:
Python"is"运算符使用整数意外运行
今天我试着调试我的项目,经过几个小时的分析,我得到了这个:
>>> (0-6) is -6
False
Run Code Online (Sandbox Code Playgroud)
但,
>>> (0-5) is -5
True
Run Code Online (Sandbox Code Playgroud)
你能解释一下,为什么?也许这是某种错误或非常奇怪的行为.
> Python 2.7.3 (default, Apr 24 2012, 00:00:54) [GCC 4.7.0 20120414 (prerelease)] on linux2
>>> type(0-6)
<type 'int'>
>>> type(-6)
<type 'int'>
>>> type((0-6) is -6)
<type 'bool'>
>>>
Run Code Online (Sandbox Code Playgroud) 根据我的意识,使用[], {}或()实例化对象会分别返回一个list, dict或新的实例tuple; 具有新标识的新实例对象.
这对我来说非常清楚,直到我实际测试它并且我注意到() is ()实际返回True而不是预期False:
>>> () is (), [] is [], {} is {}
(True, False, False)
Run Code Online (Sandbox Code Playgroud)
正如所料,与创建对象时,这种行为还表现list(),dict()并tuple()分别为:
>>> tuple() is tuple(), list() is list(), dict() is dict()
(True, False, False)
Run Code Online (Sandbox Code Playgroud)
我可以在状态文档中tuple()找到的唯一相关信息:
[...]例如,
tuple('abc')退货('a', 'b', 'c')和tuple([1, 2, 3])退货(1, 2, 3).如果没有给出参数,构造函数会创建一个新的空元组().
可以说,这还不足以回答我的问题.
那么,为什么空元组具有相同的身份,而其他像列表或词典不具有相同的身份?
Python使用'is'似乎与JavaScript'==='类似,但并不完全相同.
在这里,他们谈论确切的实例:http: //www.learnpython.org/en/Conditions
在这里(对于JS),他们谈论"相同和相同的类型". http://www.w3schools.com/js/js_comparisons.asp
你可以有两个不同的(例如)一串"Bob"的实例,当使用'is'进行比较时,它们不会返回true吗?或者它与===相同?
我猜这与严格与非严格类型的语言有关....
我注意到为相同的字符串添加空格使得它们比较不相等is,而非空间版本比较相等.
a = 'abc'
b = 'abc'
a is b
#outputs: True
a = 'abc abc'
b = 'abc abc'
a is b
#outputs: False
Run Code Online (Sandbox Code Playgroud)
我已经阅读了关于将字符串与==和进行比较的问题is.我认为这是一个不同的问题,因为空格字符正在改变行为,而不是字符串的长度.看到:
a = 'abc'
b = 'abc'
a is b # True
a = 'gfhfghssrtjyhgjdagtaerjkdhhgffdhfdah'
b = 'gfhfghssrtjyhgjdagtaerjkdhhgffdhfdah'
a is b # True
Run Code Online (Sandbox Code Playgroud)
为什么在字符串中添加空格会改变此比较的结果?
>>> s1 = "spam"
>>> s2 = "spam"
>>> s1 is s2
True
>>> q = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> r = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> q is r
False
Run Code Online (Sandbox Code Playgroud)
应该s1 is s2给多少个角色False?限制在哪里?即,我问在python开始制作单独的副本之前,字符串必须有多长.
据我所知,一切都是Python中的对象,而id()应该(我是对的吗?)为每个对象返回一个不同的数字.
在我的例子中,id(1)返回4298178968,id(2)返回,4298178944但我得到所有浮点类型,id(1.1)返回4298189032,id(2.2)也返回4298189032等相同的值.
为什么我为所有浮点值得到相同的id?
我无法理解以下行为.我正在创建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
Run Code Online (Sandbox Code Playgroud)
有关python以不同方式解释字符串的原因的可靠信息吗?我最初理解,a并b指同一个对象.然后说 …
我有一些问题让这个工作:
# Shortened for brevity
def _coerce_truth(word):
TRUE_VALUES = ('true','1','yes')
FALSE_VALUES = ('false','0','no')
_word = word.lower().strip()
print "t" in _word
if _word in TRUE_VALUES:
return True
elif _word in FALSE_VALUES:
return False
Run Code Online (Sandbox Code Playgroud)
我发现:
In [20]: "foo" is "Foo".lower()
Out[20]: False
In [21]: "foo" is "foo".lower()
Out[21]: False
In [22]: "foo" is "foo"
Out[22]: True
In [23]: "foo" is "foo".lower()
Out[23]: False
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我理解身份与平等不同,但身份何时形成?False除非由于字符串的静态性质,否则声明22应该是id == eq.在这种情况下,我对陈述23感到困惑.
请提前解释并表示感谢.
我来自 c 背景和 python 初学者。我想知道在python的情况下字符串实际上是如何存储在内存中的。
我做了类似的事情
s="foo"
id(s)=140542718184424
id(s[0])= 140542719027040
id(s[1])= 140542718832152
id(s[2])= 140542718832152
Run Code Online (Sandbox Code Playgroud)
我不明白每个字符是如何存储在内存中的,以及为什么 s 的 id 不等于 s[0] 的 id(就像它曾经在 c 中一样)以及为什么 s1 和 s2 的 id 相同?
我正在尝试下一个代码:
x = 'asd'
y = 'asd'
z = input() #write here string 'asd'. For Python 2.x use raw_input()
x == y # True.
x is y # True.
x == z # True.
x is z # False.
Run Code Online (Sandbox Code Playgroud)
为什么我们在最后一个表达中有错?
>>> a = "zzzzqqqqasdfasdf1234"
>>> b = "zzzzqqqqasdfasdf1234"
>>> id(a)
4402117560
>>> id(b)
4402117560
Run Code Online (Sandbox Code Playgroud)
但
>>> c = "!@#$"
>>> d = "!@#$"
>>> id(c) == id(d)
False
>>> id(a) == id(b)
True
Run Code Online (Sandbox Code Playgroud)
为什么只在赋值字符串时得到相同的id()结果?
编辑:我用"字符串"替换"ascii字符串".感谢您的反馈
大家好我知道这段代码的作用:
1.]我的第一个问题
x = 4
y = x
Run Code Online (Sandbox Code Playgroud)
但是这个呢.为什么同样的地址甚至是这种情况?
x = 4
y = 4
id(x)
12345678
id(y)
12345678
Run Code Online (Sandbox Code Playgroud)
2.]我的第二个问题
x = 42
y = x
x = x + 1
print x # Prints 43
print y # Prints 42
x = [1, 2, 3]
y = x
x[0] = 4
print x # Prints [4, 2, 3]
print y # Prints [4, 2, 3]
Run Code Online (Sandbox Code Playgroud)
但为什么在名单的情况,都x与y得到了由命令突变在一起x[0] = 4.
在这样的行为中,列表有什么不同?
是什么让他们表现得像这样?
最重要的是,这种行为的好处是什么?
为什么不能列出,变量,元组具有彼此的所有属性?
分配:
>>> a = ['spam']
>>> b = ['spam']
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)
参考:
>>> c = ['spam']
>>> d = c
>>> c is d
True
Run Code Online (Sandbox Code Playgroud)
False?True?python ×13
identity ×2
python-3.x ×2
string ×2
cpython ×1
debugging ×1
integer ×1
javascript ×1
reference ×1
tuples ×1