让我们来看看这个。
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()现在,data对象在main中包含什么、在populateList()中构造的列表的副本或对它的引用?
我应该做一些像list()、copy.copy()或copy.deepcopy()这样的事情吗?数据对象应该超出populateList的范围,对吗?
当我将另一个列表传递给util对象时会发生什么?data中的列表是否被更改或覆盖?
如果data中的populateList超出了作用域,为什么在第二次调用populateList之后它是有效的?
发布于 2017-02-25 18:46:31
main内部的
data对象现在包含什么、在populateList()中构造的列表的副本或对它的引用?
引用到它。但是,由于您不传递对另一个对象的引用。data是唯一一个引用该列表的人。
我应该做一些类似list()、copy.copy()或copy.deepcopy()之类的事情吗?数据对象应该超出populateList的范围,对吗?
否,只有当您想要构造一个副本(例如,如果您希望以后进一步修改列表)。对象不会被垃圾收集,因为是在堆上分配的。只要有一个引用它的活动变量,它就会保持活跃。
当我将另一个列表传递给
util对象时会发生什么?数据中的列表是否会被更改或覆盖?
不,util 不会引用新的list,旧列表是独立存在的。如果没有引用旧列表的其他对象,则旧列表最终将被垃圾收集。
如果populateList中的数据超出了作用域,为什么在第二次调用
populateList之后才有效呢?
由于超出范围,程序员说列表不再侦听data标识符。但这份名单仍然存在于记忆中。如果其他对象引用它,它们可以修改/修改它,等等。
https://stackoverflow.com/questions/42460109
复制相似问题