在使用for循环时,我在更改列表元素的值时遇到了一些麻烦。以下代码输出10和5 - 但我期待10和10。
amount = 5
costFieldList = [amount]
for index, field in enumerate(costFieldList):
if type(field) is int:
costFieldList[index] = field*2
print(costFieldList[index])
print(amount)
这是范围问题吗?提前谢谢。
答案 0 :(得分:1)
您最后打印amount
。这被设置为不可变值(5)。
如果您的上一行是print(costFieldList)
,您会看到[10]
符合预期。您使用金额初始化列表,但没有链接返回修改金额。
答案 1 :(得分:1)
通过编写costFieldList[index] = field*2
,您将创建一个全新的int实例,然后覆盖"引用"到数组中的实例,但不是值本身。因此,您将失去对amount
的原始值的引用。
在此阶段,amount
仍然有一个"参考"到5
这就是为什么你得到5作为第二个输出。
答案 2 :(得分:1)
如果您要同时将amount
和costFieldList[index]
设置为field * 2
,请使用:
amount = 5
costFieldList = [amount]
for index, field in enumerate(costFieldList):
if isinstance(field,int): # use issinstance to check if field is an integer
costFieldList[index] = field * 2
print(costFieldList)
amount=costFieldList[index] # set amount to value of costFieldList index
print(amount,costFieldList )
(10, [10])