从列表的副本中删除时删除的列表元素[重复]
Posted
技术标签:
【中文标题】从列表的副本中删除时删除的列表元素[重复]【英文标题】:Elements of list deleted when deleting from a copy of the list [duplicate] 【发布时间】:2021-03-08 15:30:53 【问题描述】:我创建了一个代码,用于在音乐列表 (music_list
) 中选择随机音乐并将它们添加到 music_queue
。当我执行这段代码时,music_list
的所有元素都被删除了,我不明白为什么。
print("Music list lenght : " + str(len(music_list)))
if len(music_queue) == 0:
tmp = music_list
while len(tmp) > 0:
music_queue.append(tmp.pop(randint(0,len(tmp) - 1)))
print("Music list lenght : " + str(len(music_list)))
【问题讨论】:
这能回答你的问题吗? python: changes to my copy variable affect the original variable 或者更好的是,该问题的副本:***.com/questions/2612802/… 改用tmp = music_list.copy()
。对于列表,“=”运算符会复制同一对象,因此在您编辑副本时会编辑原始对象。
【参考方案1】:
你需要改变
tmp = music_list
到
tmp = music_list[:]
在不复制的情况下将 tmp 设置为音乐列表,对其中一个进行更改将同时编辑两个列表。
这是假设您不想编辑 music_list
这样做的原因是因为没有复制你在内存中引用相同的项目:
不复制:
tmp = music_list
内存位置:
>>> id(music_list)
2614314102592
>>> id(tmp)
2614314102592
复制:
tmp = music_list[:]
内存位置:
>>> id(music_list)
1782888775808
>>> id(tmp)
1782888775744
【讨论】:
哦好的谢谢你我不知道这可以同时编辑两者。 @Redover 如果它回答了您的问题,请不要忘记接受答案 :) 抱歉,我忘记接受了。现在已经检查过了!以上是关于从列表的副本中删除时删除的列表元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章
从一个列表中删除元素如果不包含在另一个列表中。 C# [重复]