Python对象与.NET对象相比

时间:2012-05-04 17:08:36

标签: .net python

我非常熟悉.NET对象及其参考框架和值类型。 python对象如何与.NET对象进行比较?具体来说,我想知道平等obj1 == obj2,哈希能力(即能够输入词典)和复制。

例如,默认情况下,在.NET中,所有对象都是引用类型,它们的相等和哈希代码由它们在内存中的地址决定。此外,将变量分配给现有对象只会使其指向内存中的该地址,因此不会发生昂贵的复制。对于python来说,这似乎是一样的,但我并不完全确定。

编辑:

我能够在2000年找到一些useful info from the effbot

  

物件

     

所有Python对象都有:

     
      
  • 唯一标识(由id(x)返回的整数)
  •   
  • 一种类型(由type(x)返回)
  •   
  • 部分内容您无法更改身份。
  •   
     

您无法更改类型。

     

某些对象允许您更改其内容(不更改   身份或类型,即)。

     

某些对象不允许您更改其内容(更多信息如下)。

     

类型由类型对象表示,它更了解   这种类型的对象(它们通常占用多少字节的内存,   他们有什么方法等等。

2 个答案:

答案 0 :(得分:3)

Equality

: - 没有__cmp____eq__方法定义的对象如果尝试比较它将引发错误从对象object继承其比较。这意味着执行a > b等同于执行id(a) > id(b)

is关键字还用于查看两个变量是否指向同一个对象。另一方面,==运算符调用它正在比较的对象的__cmp____eq__方法。

Hashability

: - 如果为其定义了__hash__方法,则对象是可清除的。所有基本数据类型(包括字符串和元组)都具有为其定义的哈希函数。如果没有为类定义__hash__方法,则该类将从对象object继承它的哈希值。

Copying

: - copycopy.deepcopy及其各自的课程方法__copy____deepcopy__。使用copy复制单个对象deepcopy以复制对象的层次结构。 deepcopy

根据agf的建议编辑。

答案 1 :(得分:1)

在python中,您可以定义__eq__方法来处理==运算符。

is运算符检查一个对象是否与另一个对象相同。 (或者更具体地说是引用一个或两个对象的两个变量)

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a == b
True
>>> a is b
False
>>> c = a
>>> c is a
True

现在,此示例使用list类型,您可以将其视为定义__eq__方法的类,该方法比较其所有项的相等性。

对于hash,您在类中定义一个__hash__方法,该方法返回一个标识对象的整数。这也适用于支持散列的基本类型。请参阅hash功能。