传递给函数后,列表值正在更改

时间:2018-11-04 23:54:11

标签: python python-2.7

这个想法是为列表'a'设置静态值,但是一旦该列表通过函数的操作,其内容似乎就会改变。

a = [1, 3, 5]
u = []

def f(a1, num):
    x = []
    n = len(a1)
    for i in range(n):
        a1[i] = a1[i] + num
        x.append(0)
    for i in range(n):
        x[i] = x[i] + a1[i]
    #a1 = a2
    return x

u = f(a, 10)
print "u = ", u 
print "a = " ,a 

u = f(a, 100)
print "u = ", u 
print "a = " ,a 

输出为:

u =  [11, 13, 15] 
a =  [11, 13, 15]  
u =  [111, 113, 115]  
a =  [111, 113, 115]  

我一直在尝试创建列表的副本,希望保留原始值,但仍然没有。

任何想法都值得赞赏 :)

2 个答案:

答案 0 :(得分:1)

您是否尝试过像这样复制列表?

u = f(a[:], 10)

或者,x[i]总是从零开始,所以我认为您可以简化

def f(a1, num):
    return [a + num for a in a1] 

答案 1 :(得分:0)

Python中的列表是一个对象,因此它通过引用传递到f()中。您在函数内部修改a1所做的任何操作都将对原始列表对象进行操作。

您的代码直接在以下行中分配给a1的元素:

        a1[i] = a1[i] + num

您可以考虑在此处分配给x或一个临时变量,而不是分配回给a1