在以下代码中,我不明白为什么useless_func
当它属于两个不同的对象时具有相同的ID?
class parent(object):
@classmethod
def a_class_method(cls):
print "in class method %s" % cls
@staticmethod
def a_static_method():
print "static method"
def useless_func(self):
pass
p1, p2 = parent(),parent()
id(p1) == id(p2) // False
id(p1.useless_func) == id(p2.useless_func) // True
我认为这是正在发生的事情:
p1.useless_func
,将在内存中创建其副本。该存储位置由以下位置返回id
p2.useless_func
,将在相同的内存地址(可用)中创建它的副本,您可以id
再次使用该地址。如果您要运行一堆其他代码并再次检查实例方法的ID,我敢打赌id
s彼此相同,但与原始运行不同。
另外,您可能会注意到,在David Wolver的示例中,一旦获得对方法副本的持久引用,id
s就会变得不同。
为了证实这一理论,这是一个使用Jython的shell会话(与PyPy的结果相同),该会话未利用CPython的引用计数垃圾回收:
Jython 2.5.2 (Debian:hg/91332231a448, Jun 3 2012, 09:02:34)
[OpenJDK Server VM (Oracle Corporation)] on java1.7.0_21
Type "help", "copyright", "credits" or "license" for more information.
>>> class parent(object):
... def m(self):
... pass
...
>>> p1, p2 = parent(), parent()
>>> id(p1.m) == id(p2.m)
False
问题内容: 我以为运算符检查对象的相等性。但事实并非如此: 问题答案: *Python *将相同的内存 位置用于方法和,这是*两个对象,它们的生命周期不重叠,因此对它们返回相同的标识。请参阅下面的详细说明。 从is运算符的文档中: 运算符是否测试对象标识:并且仅当x和y是同一对象时,x is y才是true。 从ID的文档中 返回对象的“身份”。这是一个整数(或长整数),在此对象的生存期内,此整数
问题内容: 我正在练习继承。 我有两个相似的类,我想将其同化为一个数组,因此我想将Object类用作超类,因为所有内容都是Object的子类。 因此,例如,我将T类和CT类放入一个名为all的数组中,如下所示: 我跳过了声明,因为那不是我的问题。 当我希望使用循环在数组内调用函数时,我真正的问题就变成了: T和CT分别涉及的类都具有beingShot方法,该方法是公共的。 Eclipse建议将它们
问题内容: 我尝试过一些关于绑定和未绑定方法的代码。当我们调用它们时,我认为它们都会返回对象。但是,当我用于获取一些信息时,它返回的内容我并不理解。 IDE:Eclipse 插件:pydev 输出是… 为什么#1和#2返回相同的ID?他们不是不同的对象吗?如果我们分配和两个变量,#3,#4回报不同的ID。 我认为#3和#4表明它们不是同一对象,而是#1和#2 … 绑定方法的ID和未绑定方法的ID有
我在android工作室工作,2.1.2。 我在两个活动之间有一个神秘角色转换异常。 在第一个活动中,我有这个ArrayList: 我将arraylist(parcellable)插入到bundle中,以便在另一个活动中发送: 在第二个活动中,我将此用于恢复ArrayList 现在按照 我什么都试过了,带和不带Bundle的发送,类输出结束输出都是一样的,为什么要这样铸造呢?那我该怎么解决?? 谢
以前我没有得到任何错误,但突然我开始得到错误:
问题内容: 使用多处理模块时,我试图在流程中创建一个新对象。但是,有些事情使我感到困惑。 当我使用多处理模块时,新对象的ID是相同的 但是当我使用线程时,它们是不同的: 我想知道为什么它们不同。 问题答案: CPython中的id返回给定对象的指针。由于线程具有共享的地址空间,因此将在两个不同的位置分配对象的两个不同实例,并返回两个不同的ID(又称为虚拟地址指针)。 拥有自己的地址空间的单独进程不