首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表中的__repr__方法和repr()返回不同的对象

列表中的__repr__方法和repr()返回不同的对象
EN

Stack Overflow用户
提问于 2020-03-21 01:50:26
回答 3查看 47关注 0票数 0

假设我们有一个列表my_num=[1,2,3,4,5]。在该列表上应用repr()将返回该对象的字符串表示形式,例如a=repr(my_num)。我认为调用my_num.__repr__()会产生相同的对象。

但是:

代码语言:javascript
复制
>>> my_num=[1,2,3,4,5]
>>> a=repr(my_num)
>>> a is my_num.__repr__()
False

为什么会发生这种情况?

EN

回答 3

Stack Overflow用户

发布于 2020-03-21 01:59:45

非常简单,每次调用都会返回一个my_num的字符串图像。Python可以折叠小整数,但不会折叠任何复杂的字符串。每次调用都返回一个单独的string对象,因此它们具有不同的id值。

is比较id的值;==比较值。

代码语言:javascript
复制
>>> my_num=[1,2,3,4,5]
>>> repr(my_num)
'[1, 2, 3, 4, 5]'
>>> a = repr(my_num)
>>> id(a)
139786829689392
>>> a
'[1, 2, 3, 4, 5]'
>>> b = my_num.__repr__()
>>> b
'[1, 2, 3, 4, 5]'
>>> id(b)
139786829689264
>>> a is b
False
>>> a == b
True
票数 2
EN

Stack Overflow用户

发布于 2020-03-21 01:58:36

代码语言:javascript
复制
>>> my_num = [1, 2, 3, 4, 5]
>>> id(repr(my_num))
140357224404912
>>> id(my_num.__repr__())
140357224404976
>>> repr(my_num) == my_num.__repr__()
True

正如你所看到的,id是不同的(即它们是不同的对象),但它们是相等的。

票数 1
EN

Stack Overflow用户

发布于 2020-03-21 02:01:22

equality and identity是有区别的。使用repr(obj)obj.__repr__()是相同的,但是repr函数会创建一个新的string对象,因此创建的两个对象是不同的。

你甚至可以看到:

代码语言:javascript
复制
>>> my_num=[1,2,3,4,5]
>>> my_num.__repr__() is my_num.__repr__()
False

有关更多信息,请查看以下内容:

Python: Why does ("hello" is "hello") evaluate as True?

Why does comparing strings using either '==' or 'is' sometimes produce a different result?

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

https://stackoverflow.com/questions/60779208

复制
相关文章

相似问题

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