首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python列表范围

Python列表范围
EN

Stack Overflow用户
提问于 2017-02-25 18:41:47
回答 1查看 764关注 0票数 2

让我们来看看这个。

代码语言:javascript
复制
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之后它是有效的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-25 18:46:31

main内部的data对象现在包含什么、在populateList()中构造的列表的副本或对它的引用?

引用到它。但是,由于您不传递对另一个对象的引用。data是唯一一个引用该列表的人。

我应该做一些类似list()、copy.copy()或copy.deepcopy()之类的事情吗?数据对象应该超出populateList的范围,对吗?

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

当我将另一个列表传递给util对象时会发生什么?数据中的列表是否会被更改或覆盖?

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

如果populateList中的数据超出了作用域,为什么在第二次调用populateList之后才有效呢?

由于超出范围,程序员说列表不再侦听data标识符。但这份名单仍然存在于记忆中。如果其他对象引用它,它们可以修改/修改它,等等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42460109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档