2

我对实际对象及其在 python.Google 中的引用有点困惑,但没有得到我需要的东西。

对象创建是否也返回对该对象的引用?为什么我问这个是因为我能够使用带有.分隔符的实际对象来调用它的方法。我们通常使用对象的引用来调用方法。一个例子可能会清楚地说明我在问什么。

l = [2,4,1,3]# 'l' 是对实际对象的引用。对吗?

RHS 部分是否创建对象并返回对该对象的引用,该对象将分配给 LHS ?

因为我可以同时使用这两者list.sort()并对[2,4,1,3].sort()列表进行排序。是[2,4,1,3]实际对象还是在创建对象的同时产生引用?

类的情况类似。

obj=SomeClass()#obj 是对 SomeClass() 创建的对象的引用。

是否SomeClass()在创建对象的同时返回引用?

因为我们可以同时使用obj.method1()SomeClass().method1来调用方法。

4

1 回答 1

3

我建议您阅读Python 语言参考“数据模型”

在 python 中,当你创建一个对象时,它是在堆中分配的。如果将对象分配给某个变量,则实际上是在标记它。一个对象可能有许多标签。当对象丢失所有标签时,它可能会被 python 垃圾收集器销毁。因此,您的问题的答案 - [1,2,3]返回任何引用,而只是创建新对象。

编辑:

其实,期间

[1, 2, 3].sort()

有一个对 [1, 2, 3] 列表的引用,它保留在 VM 的堆栈中。但是,如前所述,它没有被退回。但期间:

l = [1, 2, 3]

此引用从 VM 的堆栈复制到 l。

于 2012-08-30T09:21:45.703 回答