当前位置: 首页 > 面试题库 >

识别对象,为什么id(...)返回的值发生变化?

钱锦
2023-03-14
问题内容

id(对象)

这是一个整数(或长整数),在此对象的生存期内,此整数保证是唯一且恒定的。

你能解释这个输出吗?为什么jID会更改?

>>> i=10  
>>> id(i)  
6337824  
>>> j=10  
>>> id(j)  
6337824  
>>> j=j+1  
>>> id(j)  
6337800  
>>> id(i)  
6337824

问题答案:

由于整数是不可变的,因此每个整数值都是具有唯一ID的不同对象。整数10与的ID不同11。这样j=j+1做不会更改现有整数对象的值,而是会更改j为指向的对象11

看看当我们独立创建一个新变量k并为其分配值时会发生什么11

>>> j=10
>>> id(j)
8402204
>>> j=j+1
>>> id(j)
8402192
>>> k=11
>>> id(k)
8402192

请注意,并非每个整数都只有一个并且只有一个对应的对象。这仅适用于Python决定缓存的小整数。对于大整数不会发生:

>>> x = 123456789
>>> id(x)
8404568
>>> y = 123456789
>>> id(y)
8404604

参见https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong:

当前的实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建int时,实际上实际上是返回对现有对象的引用。



 类似资料:
  • 问题内容: 有人可以提供goroutine返回的澄清值。从goroutine返回的值是否已存入抵押。 例如: 我们是否应该避免在go例程中避免返回值? 问题答案: 快速查看一下组装输出显示 该函数确实将其结果存储到堆栈中 因此,当从goroutine调用它时,它会将结果存储到堆栈中。但是,这是一个新的堆栈,当goroutine结束时,该堆栈会被破坏,因此无法获取返回值。 但是,无法检索这些结果。

  • 在单元测试(Groovy和Spock)的中,我用mock填充上面的字段: 接下来,在我的测试用例中,我调用一个方法,我希望从中获取,该方法来自步骤中的模拟对象: 问题是,对于,我将获得。 这是因为我以错误的方式使用Groovy吗?如何使成为它应该成为的对象?我应该使用mock/stub吗?

  • 谁能给我解释一下,当我改变从find函数返回的值时,为什么原始数组中的值会改变呢?是不是有一个我缺失的概念?在执行代码之后,我将得到下面提到的输出。

  • 问题内容: 我有一个班级和年龄段。但是,当我更改对象的年龄时,该类的所有其他对象也会更改。 有人可以帮助解决这个问题吗? 问题答案: 静态变量 是 类变量, 因此从变量声明中删除为: 根据java docs: 在声明中具有static修饰符的字段称为静态字段或类变量。它们与类关联,而不与任何对象关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。

  • 在C++98中,以下代码无法编译,因为ifstream没有复制构造函数: 但是,在C++11中使用多个GCC版本时,编译时不会出现警告。这是什么原因?

  • 我在客户端使用vue、vue路由器,在服务器端使用express、morgan(MEVN应用程序) 在客户端我用vue cookie设置cookie 在服务器端,我使用CookieParser 所以,在应用程序。我有这样的代码 并且,在文件中,我有这样一个GET请求的代码 问题是,var loginHash=req.cookies['Login'];总是返回未定义的,即使我有登录cookie 添加

  • 在 C 中,当一个应该返回对象的函数在没有 return 语句的情况下结束时会发生什么?会得到什么回报? 例如。

  • 本文向大家介绍jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?相关面试题,主要包含被问及jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?时的应答技巧和注意事项,需要的朋友参考一下 [jQuery] jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?