我有以下代码
pop = [[2.162840682206156, 1.8735137437504137, 1.0432493688065905],
[2.8316083260339413, 1.3335260337446606, 0.7503595302921512]]
print '==>pop :: {}'.format(pop)
def serial(ind):
ssgs = ssgs.SSGS()
pheno = ssgs.s_SGS(ind)
print "serial :: {}".format(pheno.serial)
return pheno.serial,
for i in range(len(pop)):
print '==>pop1 :: {}'.format(pop[i])
value = serial(pop[i])
print '==>pop2 :: {}'.format(pop[i])
将listpop传递给serial()后,pop的值变为None
==>pop :: [[2.162840682206156, 1.8735137437504137, 1.0432493688065905], [2.8316083260339413, 1.3335260337446606, 0.7503595302921512]]
==>pop1 :: [2.162840682206156, 1.8735137437504137, 1.0432493688065905]
serial :: [0, 0, 3]
==>pop2 :: [None, None, None]
==>pop1 :: [2.8316083260339413, 1.3335260337446606, 0.7503595302921512]
serial :: [0, 0, 3]
==>pop2 :: [None, None, None]
更新:我期望的输出是这样的,即pop的值不应该改变
==>pop1 :: [2.8316083260339413, 1.3335260337446606, 0.7503595302921512]
serial :: [0, 0, 3]
==>pop2 :: [2.8316083260339413, 1.3335260337446606, 0.7503595302921512]
更新:ssgs是一个作业调度类,它在其中查找每个任务的开始时间。你知道吗
如果我是正确的,pop的副本被发送到serial(),那么为什么pop的值被None替换呢?为什么程序会这样?你知道吗
因为列表是可变的数据类型。Python中的这些函数传递它们的指针(像任何常规对象一样),而不是像字符串或int那样作为单个单元。自动复制自己。你知道吗
这就允许你这么做。将一个列表传递到一个函数中并从中修改它。这有很多好处。你知道吗
因此,如果要将列表传递到正在对其执行操作的函数中,但不希望更改原始列表,则必须复制原始列表,以便仅在函数中本地使用:
要在本地使用它,请不要分配它,只需执行serial(my_list[:])
另外,不要调用list-pop,因为pop是list()实例的一个方法,这会让人困惑。你知道吗
相关问题 更多 >
编程相关推荐