【发布时间】:2012-05-04 17:08:36
【问题描述】:
我对 .NET 对象及其用于引用与值类型的框架非常满意。 python 对象与 .NET 对象相比如何?具体来说,我想知道平等 obj1 == obj2、哈希能力(即能够放入字典)和复制。
例如,默认情况下,在 .NET 中,所有对象都是引用类型,它们的相等性和哈希码由它们在内存中的地址确定。此外,将变量分配给现有对象只会使其指向内存中的该地址,因此不会发生昂贵的复制。看来python也是这样,但我不太确定。
编辑:
- 平等
-
ischecks for referential equality,==checks for value equality(但是值相等对对象意味着什么?)
-
我找到了一些写于 2000 年的 useful info from the effbot:
对象
所有 Python 对象都有这个:
- 唯一标识(一个整数,由
id(x)返回)- 一个类型(由
type(x)返回)- 部分内容无法更改身份。
你不能改变类型。
某些对象允许您更改其内容(无需更改 身份或类型,即)。
某些对象不允许您更改其内容(更多内容见下文)。
类型由一个类型对象表示,它更了解 这种类型的对象(它们通常占用多少字节的内存, 他们有什么方法,等等)。
【问题讨论】:
-
对于值/引用比较语义:stackoverflow.com/questions/132988/…
-
每个对象都有一个唯一的ID。
a is b等价于id(a) == id(b)。当没有定义__eq__或__cmp__方法时,相等比较默认为这个。