这个想法是为列表'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]
我一直在尝试创建列表的副本,希望保留原始值,但仍然没有。
任何想法都值得赞赏 :)
答案 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
。