Python - 由函数更改的外部变量

时间:2015-02-04 04:24:12

标签: python

我正在尝试编写一个对列表中的每个值进行平方的函数,返回一个包含单个值的平方的新列表。我将列表传递给它,它会更改原始列表。我希望不对原始列表进行任何更改,以便我可以在其他功能中使用它。

def squareset(c):
    d=c
    count = len(c)
    print(c)
    for i in range(0,(count),1):
        d[i]=d[i]**2
    return d

test = [1,2,3]
print(squareset(test))
print(test)

对于在int或float类型的简单变量上运行的函数,我没有遇到这个问题。

我添加了d = c行试图阻止更改列表测试,但没有区别。 print(test)产生结果[1,4,9]而不是[1,2,3]。为什么会发生这种情况?我该如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

执行d=c只会使参数d指向c指向的同一对象。因此,对d所做的每项更改都是针对c指向的同一对象。

如果您想避免更改c,您必须发送该对象的副本,或者在该函数内复制该对象并使用此副本。

例如,执行:

d = [i for i in c]

或:

d = c[:]

而不是:

d = c

答案 1 :(得分:0)

将列表分配给另一个变量不会复制列表。要复制,只需

def squareset(c):
    d=c[:]
    ...

答案 2 :(得分:0)

试试这个:

def square(var):     
    return [x*x for x in var]  

x = [1,2,3]  
z = square(x)

答案 3 :(得分:0)

虽然提供的其他答案都是正确的,但我建议使用列表理解来确定您的列表。

In [4]:

test = [1,2,3]
results = [elm**2 for elm in test]
print test
print results
[1, 2, 3]
[1, 4, 9]

如果你想要一个功能:

def squareList(lst):
    return [elm**2 for elm in lst]