【问题标题】:Reuse variable name to point at different data重用变量名指向不同的数据
【发布时间】:2017-04-21 12:54:51
【问题描述】:

所以我被 Python 中看起来像 C 中的指针的变量所困扰,例如:

foo = ['item1', 'item2', 'item3']

现在,如果我将该列表分配给键为“bar”的字典的值:

my_dict['bar'] = foo

一切都很好,但现在如果我这样做了:

foo.clear()

然后 my_dict['bar'] 现在是空的,这意味着 foo 和 my_dict['bar'] 只是指向相同数据的两个不同名称。我该如何解决这个问题,以便我可以将 foo 转储到 my_dict['bar'] 中,然后将 foo 重用于字典中的下一个项目?

我怎样才能解决这个问题,以便我可以重复使用“foo”?

【问题讨论】:

    标签: python-3.x variables dictionary


    【解决方案1】:

    你是对的,它就像一个指针。数据集合,例如列表、字典、对象等,通过引用传递。因此,当您设置 mydict["bar"] = foo 时,您将其设置为等于 foo 的引用。

    要解决这个问题,您需要复制一份 foo.你应该得到一个浅拷贝

    mydict["bar"] = foo[:]

    在这种情况下,切片运算符将使用新的参考值创建 foo 中所有元素的新列表。您还可以考虑copy python 模块,它具有类似的效果,但支持深度复制操作。即它创建对象本身的副本,以及其中包含的所有对象。

    还请阅读 jasonharper 对此的评论。如果您不需要元素的副本,则只需创建一个新的空列表会更有效

    【讨论】:

    • 或者,使用foo = [] 而不是foo.clear() 开始一个全新的列表。
    • 非常感谢,虽然我有一个简单的方法可以做到这一点。在这种情况下,它是完美的,因为我所追求的确实是一个肤浅的副本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多