繁体   English   中英

Python:与 list.remove 混淆

[英]Python: Confused with 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

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

非常感谢

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

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

side = [5]

你制作了一个新东西[5] ,并给它命名为side 当你然后写

eva = side

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

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

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

evaside指的是同一个列表。

如果您想要一份清单的副本:

eva = side[:]

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

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

dusan 的回答是正确的,是一种聪明的方法,但我认为它打破了 Python 禅宗的指导方针“显式优于隐式”。

我见过的一种更常见的模式是使用copy模块来确保项目是深copy

>>> import copy
>>> eva = copy.copy(side)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM