在python中将变量传递给函数后,原始变量变为none

2024-05-19 12:03:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码

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替换呢?为什么程序会这样?你知道吗


Tags: 代码noneformatreturndefserialpopsgs
1条回答
网友
1楼 · 发布于 2024-05-19 12:03:48

因为列表是可变的数据类型。Python中的这些函数传递它们的指针(像任何常规对象一样),而不是像字符串或int那样作为单个单元。自动复制自己。你知道吗

这就允许你这么做。将一个列表传递到一个函数中并从中修改它。这有很多好处。你知道吗

因此,如果要将列表传递到正在对其执行操作的函数中,但不希望更改原始列表,则必须复制原始列表,以便仅在函数中本地使用:

clist = my_list[:] # Use slicing to make a copy of my_list
serial(clist)

要在本地使用它,请不要分配它,只需执行serial(my_list[:])

另外,不要调用list-pop,因为pop是list()实例的一个方法,这会让人困惑。你知道吗

相关问题 更多 >

    热门问题