python中的实际对象及其引用

时间:2012-08-30 08:53:34

标签: python

我对python中的实际对象及其引用有点困惑。经过多次搜索但没有得到我需要的东西。

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

l = [2,4,1,3]#'l'是对实际object.Right的引用?

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

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

与类相似。

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

SomeClass()是否会返回引用以及创建对象?

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

1 个答案:

答案 0 :(得分:3)

我建议你阅读The Python Language Reference "Data Model"

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

编辑:

实际上,在

期间
[1, 2, 3].sort()

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

l = [1, 2, 3]

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