首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:文字:文字的计算

问Python:文字:文字的计算
EN

Stack Overflow用户
提问于 2021-10-21 20:19:43
回答 3查看 104关注 0票数 0

来自Python文档:

6.2.2。文字 ..。 具有相同值的文本(程序文本中相同的事件或不同的事件)的多个值计算可以获得相同的对象或具有相同值的不同对象。

我需要理解上面这段话,但我觉得很不自在。我需要你的帮助来澄清一些事情:

代码语言:javascript
复制
>>> " Got any rivers you think are uncrossable ?" #1
' Got any rivers you think are uncrossable ?' #2
>>> " Got any rivers you think are uncrossable ?" #3
' Got any rivers you think are uncrossable ?' #4

#1和#3是具有相同值的两个文本,分别获得相同的对象#2和#4。这些对象的值是相同的。他们的评价如何能获得相同价值的不同对象?这里的评价结果有什么关系?

程序文本中的相同事件或不同的事件

如何区分同一事件和不同事件?发生地点与评价结果有什么关系?

EN

回答 3

Stack Overflow用户

发布于 2021-10-21 20:26:05

两者都是字符串对象,并且具有不同的is,即使值相同。例如:

代码语言:javascript
复制
>>> id("My string")
140140708077104
>>> id("My string")
140140708085936
>>> my_first_string = "Repeated value"
>>> my_second_string = "Repeated value"
>>> my_first_string == my_second_string
True
>>> id(my_first_string) == id(my_second_string)
False
票数 2
EN

Stack Overflow用户

发布于 2021-10-21 20:29:46

比较这两种情况:

代码语言:javascript
复制
>>> a = 'a'
>>> b = 'a'
>>> id(a)
1799740566768
>>> id(b)
1799740566768

vs

代码语言:javascript
复制
>>> a = 'a b'
>>> b = 'a b'
>>> id(a)
1799740710960
>>> id(b)
1799751802672

在内部,在第一个示例中,a和b都引用同一个对象,而在第二个示例中,它们引用不同的对象。

这可能会产生一些意想不到的结果:在第一种情况下是a is b -> True,而在第二种情况下是a is b -> False。

为什么这很重要?

正如在评论中所说的,你很可能不需要在意。对于不可变的文本,在访问“相同”文本时,无论您的代码是引用同一个对象还是不同的对象,在功能上都应该没有区别。但是,在可变对象的情况下,一定要注意可能的副作用。

有关更多信息,请参见例如在哪种情况下,相同的字符串共享相同的引用?和sys.intern()做了什么,什么时候应该使用它?

编辑:测试结果,如果您得到相同的对象或不同的对象,使用下面的脚本:

代码语言:javascript
复制
if __name__=="__main__":
    for i in range(100):
        a = ''.join(['a']*i)
        b = ''.join(['a']*i)
        print(f'a: {a}\nb: {b}\na is b: {a is b}')

在Windows PowerShell中运行Python3.9.7,给出以下结果:

代码语言:javascript
复制
a:
b:
a is b: True
a: a
b: a
a is b: True
a: aa
b: aa
a is b: False
a: aaa
b: aaa
a is b: False
a: aaaa
b: aaaa
a is b: False
a: aaaaa
b: aaaaa
a is b: False
a: aaaaaa
b: aaaaaa
a is b: False
... etc.
票数 1
EN

Stack Overflow用户

发布于 2021-10-21 20:49:55

这篇文章指的是对象身份和对象价值。关键字is用于将对象与同一对象进行比较;而运算符==用于测试是否相等。

两个对象实例可以具有相同的值,但是是不同的对象。

例如,CPython将某些整数缓存为内部优化,而却没有得到的保证,所以结果可能有所不同:

代码语言:javascript
复制
>>> a = 999
>>> b = 999
>>> a == b       # equal
True
>>> a is b       # not the same object!
False
>>> a = 5
>>> b = 5
>>> a == b       # also equal
True
>>> a is b       # and happen to be the same object
True

这说明了短语“可以获得相同的对象或具有相同值的不同对象”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69668295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档