我就是不明白。请看下面我的代码
def startscan(rangeip,ports,cblocks):
pool = ThreadPool(processes=MAX_THREADS)
results = []
testt = []
#print(rangeip)
#print(ports)
#print(cblocks)
for ii in range(cblocks):
print(rangeip[2])
rangeip[2] = int(rangeip[2]) + 1
print(rangeip[2])
print(rangeip)
testt.append(rangeip)
print(testt)
当我运行它时,它返回以下输出:
root@node2nl home]# python g.py -r 192.168.20.1 -p 80 -a 3
20
21
['192', '168', 21, '1']
21
22
['192', '168', 22, '1']
22
23
['192', '168', 23, '1']
[['192', '168', 23, '1'], ['192', '168', 23, '1'], ['192', '168', 23, '1']]
正如您所看到的,除了testt列表没有正确填充之外,其他都是正确的。它显示的值是相同值的三倍。我需要它输出正确的结果如下
[['192', '168', 21, '1'], ['192', '168', 22, '1'], ['192', '168', 23, '1']]
我做错什么了?这里好像发生了什么奇怪的事情
rangerip列表是由其引用附加的,而不是列表的副本。因此,结果在结尾包含三倍于同一引用的内容
您需要复制/克隆列表,有几种方法:
注意,另外修改了原始参数
rangeip
,这不是好的做法。您可以考虑在递增之前进行复制,而不是添加ii+1
而不是1
当您将
rangeip
添加到列表中时,需要复制它。您的代码当前只将对列表的引用添加到ttest
列表中三次,但不断更改rangeip
。用ttest.append(rangeip[:])
替换ttest.append(rangeip)
以获得所需的结果相关问题 更多 >
编程相关推荐