Python:与list.remove混淆

Sev*_*vik 10 python list

我是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")
Run Code Online (Sandbox Code Playgroud)

这会产生:

[5] side before
[5] eva before
[] side after
[] eva after
Run Code Online (Sandbox Code Playgroud)

为什么remove命令也会影响列表'side'?如果不修改列表,我该怎么做才能使用'side'的副本?

非常感谢你

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

Kat*_*iel 13

Python有"东西"和"事物名称".当你写作

side = [5]
Run Code Online (Sandbox Code Playgroud)

你做了一件新事物[5],并给它起了名字side.然后当你写

eva = side
Run Code Online (Sandbox Code Playgroud)

你为它命名了side.作业只是给事物命名!仍然只有一件事[5],有两个不同的名字.

如果你想要一件新东西,你需要明确地要求它.通常你会这样做copy.copy(thing),虽然在列表的情况下有特殊的语法thing[:].

FYI"事物"通常被称为"物体"; "名称"通常称为"引用".


dus*_*san 11

evaside参考相同的清单.

如果您想拥有该列表的副本:

eva = side[:]
Run Code Online (Sandbox Code Playgroud)

您可以在本文中阅读有关复制列表的更多信息:Python:以正确的方式复制列表

编辑:这不是复制列表的唯一方法.请参阅本答案第一条评论中发布的链接.

  • http://stackoverflow.com/questions/2612802/how-to-clone-a-list-in-python/2612815#2612815上也有很好的答案. (4认同)