相关疑难解决方法(0)

为什么使用'=='或'is'比较字符串有时会产生不同的结果?

我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.

现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.

>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

python string comparison identity equality

1076
推荐指数
13
解决办法
148万
查看次数

Python:为什么("你好"是"你好")评价为True?

为什么用Python "hello" is "hello"生成True

我在这里阅读以下内容:

如果两个字符串文字相等,则它们被放在相同的内存位置.字符串是不可变的实体.不会造成伤害.

因此,每个Python字符串在内存中只有一个位置?听起来很奇怪.这里发生了什么?

python identity string-comparison object-comparison

56
推荐指数
4
解决办法
2万
查看次数

关于更改不可变字符串的id

关于id类型对象的某些东西str(在python 2.7中)让我很困惑.该str类型是不变的,所以我希望,一旦它被创建,它将始终具有相同的id.我相信我不会这么说自己,所以我会发布一个输入和输出序列的例子.

>>> id('so')
140614155123888
>>> id('so')
140614155123848
>>> id('so')
140614155123808
Run Code Online (Sandbox Code Playgroud)

所以同时,它一直在变化.但是,在指向该字符串的变量之后,事情会发生变化:

>>> so = 'so'
>>> id('so')
140614155123728
>>> so = 'so'
>>> id(so)
140614155123728
>>> not_so = 'so'
>>> id(not_so)
140614155123728
Run Code Online (Sandbox Code Playgroud)

因此,一旦变量保存该值,它就会冻结id.的确,在del so和之后del not_so,id('so')开始的输出再次改变.

这是相同的行为与(小)整数.

我知道不变性和拥有相同之间没有真正的联系id; 仍然,我试图弄清楚这种行为的来源.我相信那些熟悉python内部的人会比我更少惊讶,所以我试图达到同样的目的......

更新

尝试使用不同的字符串会产生不同的结果......

>>> id('hello')
139978087896384
>>> id('hello')
139978087896384
>>> id('hello')
139978087896384
Run Code Online (Sandbox Code Playgroud)

现在它平等的......

python string immutability python-internals

43
推荐指数
1
解决办法
6851
查看次数