就地删除对象,Python中的意外行为

时间:2016-06-11 00:17:52

标签: python list debugging in-place

好的,我已经花了一段时间在这个上面而且无处可去,所以情况如下:

len(hostlist) -> 10810 objects (no duplicates)

subset = []
for host in hostlist:
  if is_vm(host):
    subset.append(host)

len(subset) -> 630 objects, no duplicates

for host in hostlist:
  if host in subset:
    hostlist.remove(host)

len(hostlist) -> 10445 objects, no duplicates

**** 10810 - 630 != 10445 ****

is_vm()函数只是检查主机中是否存在几个不同的字符串,并且我已经验证了在第一个for循环之后,temp的大小/内容/状态没有以任何方式被修改完成了。

现在显然这很奇怪。令人更奇怪的是,在再次(重复)运行第二个for循环时,没有更改len(hostlist) - > 10280 - > 10209 - > 10187 - > 10180

随着情节变浓:

len(hostlist) -> 10810 objects (no duplicates)

subset = []
for host in hostlist:
  if is_vm(host):
    subset.append(host)

len(subset) -> 630 objects, no duplicates

for host in subset:
  hostlist.remove(host)

len(hostlist) -> 630 objects, no duplicates

这是一个单线程脚本,没有进行后台修改,所有这些命令都是从交互式提示符运行的。

我错过了一些明显的东西吗?因为如果我理解正确,这两组代码应该在功能上等同!帮助:/

0 个答案:

没有答案