Python:与list.remove混淆


问题内容

我是Python的新手,很抱歉遇到这个简单的问题。(尽管我现在花了2个小时来找到答案)

我简化了代码以说明问题:

side=[5]
eva=side
print(str(side) + " side before")
print(str(eva) + " eva before")
eva.remove(5)
print(str(side) + " side after")
print(str(eva) + " eva after")

这样产生:

[5] side before
[5] eva before
[] side after
[] eva after

为什么remove命令也会影响列表的“边”?在不修改列表的情况下,如何使用“ side”的副本?

非常感谢你

编辑:非常感谢您的良好和易于理解的答案!


问题答案:

Python具有“事物”和“事物名称”。当你写

side = [5]

你制造一个新东西[5],并给它起名字side。当你写的时候

eva = side

您为改名side。作业只是给事物起名字!仍然只有一件事[5],有两个不同的名称。

如果您想要新事物,则需要明确要求它。通常您会这样做copy.copy(thing),尽管在列表的情况下有特殊的语法thing[:]

仅供参考,“事物”通常称为“对象”;“名称”通常称为“引用”。