gpt4 book ai didi

Python使方法不可变

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:32 25 4
gpt4 key购买 nike

我有以下代码:

class Hello(object):
def __init__(self, names):
self.names = names
def getnames(self):
return self.names

if __name__ == "__main__":
names = ['first', 'middle', 'last']
ob = Hello(names)
a = ob.getnames()
print a
a.remove('first')
print a
print ob.getnames()

输出如下:

['first', 'middle', 'last']
['middle', 'last']
['middle', 'last']

是因为 getnames 方法是可变的吗?或者这里可能还有其他事情发生。谁能解释一下?如何使该方法返回原始列表?

最佳答案

在 Python 中,赋值永远不会复制数据结构。它仅使名称引用一个值。此外,函数调用本质上是将实际参数分配给参数名称。因此,您的代码中没有任何内容被复制。名称 aob.names 指的是同一个列表。如果您想要列表的两个副本(原始列表和一个要修改的列表),那么您需要在某个时候制作一个副本。您必须决定最有意义的地方。

您可以通过几种不同的方式复制列表:list(L)L[:] 是最常见的方式。

关于Python使方法不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7693937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com