ID of an array element changes in IPython
为什么数组元素的ID不断变化?
1 2 3 4 5 6 7 | In [43]: x = np.array([[1,2,3],[4,5,6],[7,8,9]]) In [44]: print id(x[0]) 30836416 In [45]: print id(x[0]) 31121344 In [46]: print id(x[0]) 31471808 |
IPython屏幕截图
用python脚本编写时不是这种情况
用python脚本编写时,我们得到相同的ID
下图中还有其他观察结果
aCopy是数组a的副本。
两个数组的相同元素的id打印两次。
根据输出,
除了第一个打印外,所有数组元素的ID(无论是同一数组还是不同的(副本))都相同。
为什么两个不同数组的相同元素的id相同?
为什么多次打印时其中一个id不同?
CPython中的
在程序中打印时,两次打印之间没有任何反应,因此很有可能为
另一方面,在IPython中,每个用户输入都永久存储在历史记录中,因此在打印之间创建对象,这使得
在IPython中一次执行两次打印时,我为两个对象获得了相同的ID,但是每次执行此操作时都得到了一个不同的ID:
1 2 3 4 5 6 7 8 9 10 11 | In [28]: print id(x[0]); print id(x[0]) 140000637403008 140000637403008 In [29]: print id(x[0]); print id(x[0]) 140000637402608 140000637402608 In [30]: print id(x[0]); print id(x[0]) 140000637402928 140000637402928 |
当然也不能保证。
这是一个重复的问题,但是找到正确的SO链接可能很困难。
来自
Return the"identity" of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the sameid()value.
如果重复出现