每个python对象都有一个类型、id和一个值?

每个python对象都有一个类型、id和一个值?,python,object,Python,Object,有时我们将对象定义为包含类型、id和值的对象。有时我们说值本身就是对象。这两个定义相互矛盾。对于例如a=5,我们可以说有一个int object,一个包含值5的对象,在另一种情况下,我们说5本身是一个object,因此在这种情况下,不存在包含值5的对象。这两个定义不一致??我正在完成一个python任务,我为此苦苦挣扎了很长一段时间,但我找不到正确的答案。有些作者使用了第一个定义,有些人使用了第二个定义。在python中,所有东西都是对象,包括5;您可以显示id5和type5 但是,对于某些对象

有时我们将对象定义为包含类型、id和值的对象。有时我们说值本身就是对象。这两个定义相互矛盾。对于例如a=5,我们可以说有一个int object,一个包含值5的对象,在另一种情况下,我们说5本身是一个object,因此在这种情况下,不存在包含值5的对象。这两个定义不一致??我正在完成一个python任务,我为此苦苦挣扎了很长一段时间,但我找不到正确的答案。有些作者使用了第一个定义,有些人使用了第二个定义。

在python中,所有东西都是对象,包括5;您可以显示id5和type5

但是,对于某些对象,标识是不相关的,您只关心它们的值。这些对象必须是不可变的

数字是这类对象。。。我们不在乎这个5或那个5;这个短语听起来不合逻辑。5只因其价值而有趣

对于其他对象,尤其是可变对象,您更关心标识:此列表不是该列表,即使两者都为空

在使用类似

 if x is y: ...
在Python中,如果x和y是数字或字符串,这将是一个非常糟糕的主意,如果x和y是示例列表实例,这将非常有意义。 数字标识的问题是,如果x和y是数字,我写:

z1 = x + y
z2 = x + y
z1和z2可能是同一个对象,即idz1==idz2,z1是z2返回真值,也可能不是,即idz1!=idz2和z1为z2返回False


当然,z1的值和z2的值将是相同的,即z1==z2,这就是使用数字时需要注意的问题。

对于不可变类型(如int或tuple),实例与单个值紧密相关;如果不更改为不同的实例,则无法更改该值,并且未定义具有相同值的两个变量是否共享一个实例;口译员可以选择这样做,也可以不这样做。因此,不可变类型实际上没有解耦。除此之外,你还有一个狭隘、具体的问题吗?有时我们说值本身就是对象。这是谁说的?我甚至不知道它应该是什么意思,至少,它是模糊的,没有定义的。你所说的5本身是什么意思?5是一个抽象的数学概念。在计算的具体术语中,有一些内存表示5.@juanpa.arrivillaga的数学概念,老实说,至少在python中,大多数人都说值是对象。这个短语在其他oop语言中使用不多,因为在其他语言中,基本类型不是对象。人们通常将事物称为对象,用于定义复杂的数据类型,其中对象具有多个属性,称为对象的状态。对于python来说,值是至少对内置类型有意义的对象谢谢你回答我的问题,现在它有意义了。对于对象,我可以将保存值的内存空间想象为对象本身,因为它符合每个对象包含一个值的定义。显然,内存块的大小将取决于存储的值或对象的类型。最后一件事我说得对,至少在python中,大多数人都说值是对象。这个短语在其他oop语言中使用不多,因为在其他语言中,基本类型不是对象。人们通常将事物称为对象,用于定义复杂的数据类型,其中对象具有多个属性,称为对象的状态。对于python,值是至少对内置类型有意义的对象不可变对象,因为定义对象5的状态没有意义