Python列表scop

2024-10-01 22:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们来看看这个。在

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之后它是有效的?在


Tags: 对象testself列表datamaindefutil
1条回答
网友
1楼 · 发布于 2024-10-01 22:27:05

What does the data object inside of main now contain, a copy of a the list constructed inside of populateList() or a reference to it?

对它的引用。但是因为你没有把引用传递给另一个对象。data是唯一引用该列表的。在

Should I do something like list() or copy.copy() or copy.deepcopy()? The data object should go out of scope inside of populateList, right?

不,仅当您想构建一个副本时(例如,如果您想在以后进一步修改列表)。对象不会被垃圾回收,因为它是在堆上分配的。只要有一个活动变量引用它,它就会保持活动状态。在

What happens when I pass another list to the util object? Does the list indata get altered or overwritten?

不,util将不引用新列表,旧列表独立存在。如果没有其他对象引用旧列表,则旧列表最终将被垃圾回收。在

If the data inside of populateList go out of scope, why is it valid after the second call to populateList?

超出范围时,程序员说列表不再监听data标识符。但这份名单至今仍留在人们的记忆中。如果其他对象引用它,它们可以更改/修改它,等等

相关问题 更多 >

    热门问题