让我们来看看这个。在
class SomeObject:
testList = []
def setList(self, data):
self.testList = data
def getList(self):
return self.testList
class UtilClass:
def populateList(self, foreign, str):
data = []
data.append(str)
foreign.setList(data)
def main():
data = SomeObject()
data2 = SomeObject()
util = UtilClass()
util.populateList(data, "Test 1")
util.populateList(data2, "Test 2")
util.populateList(data, "Test 3")
print(data.getList())
print(data2.getList())
if __name__=="__main__":
main()
在main
中的data
对象现在包含了什么?populateList()
中构造的列表的副本或对它的引用?在
我应该做list()
或者{populateList
内的范围,对吗?在
当我向util
对象传递另一个列表时会发生什么?data
中的列表是否被更改或覆盖?在
如果populateList
内部的data
超出范围,为什么在第二次调用populateList
之后它是有效的?在
对它的引用。但是因为你没有把引用传递给另一个对象。
data
是唯一引用该列表的。在不,仅当您想构建一个副本时(例如,如果您想在以后进一步修改列表)。对象不会被垃圾回收,因为它是在堆上分配的。只要有一个活动变量引用它,它就会保持活动状态。在
不,
util
将不引用新列表,旧列表独立存在。如果没有其他对象引用旧列表,则旧列表最终将被垃圾回收。在当超出范围时,程序员说列表不再监听
data
标识符。但这份名单至今仍留在人们的记忆中。如果其他对象引用它,它们可以更改/修改它,等等相关问题 更多 >
编程相关推荐