Python变量赋值改变了值

时间:2017-03-28 10:24:51

标签: python

我是一名网络工程师,他试图将Python编程作为工作要求来学习。

我在下面写了这段代码

#排除列表中第一个和最后一个项目的功能

def chop(t):
    t.pop(0) and t.pop(len(t)-1)
    return t

当我在列表t上运行该函数并将其分配给变量a时。 a在函数执行后得到列表的其余部分,并成为一个新的列表。这很完美。

>>> t = ['a', 'b', 'c', 'd', 'e' ,'f','g','h','i','j','k','l']
>>> a=chop(t)
>>> a
['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
>>> 

后来当我尝试它运行良好但a的值也改变了print chop(t)的输出,而我没有通过函数chop(t)运行变量a。有人可以解释为什么会发生这种情况吗?

>>> print chop(t)
['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
>>> a
['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

此致 Umesh制作

3 个答案:

答案 0 :(得分:1)

要保存未经修改的列表t,请按a = t[:]创建副本,并在列表a上测试

>>> t = ['a', 'b', 'c', 'd', 'e' ,'f','g','h','i','j','k','l']
>>> a=t[:]
>>> a.pop(0)
'a'
>>> a
['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
>>> t
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
>>> 

答案 1 :(得分:0)

当你打电话给chop(t)时,t正在通过引用传递。所以当你进行操作" t.pop(0)和t.pop(len(t)-1)" ,它是在原始对象上完成而不是副本。

由于上述原因,以下情况也是如此

>>> t = ['a', 'b', 'c', 'd', 'e' ,'f','g','h','i','j','k','l']
>>> chop(t)
>>> t
['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
>>> 

答案 2 :(得分:0)

t = ['a', 'b', 'c', 'd', 'e' ,'f','g','h','i','j','k','l']
def chop(t):
    t.pop(0) and t.pop(len(t)-1)
    return t
a=chop(t)

在python中,Assignment从不复制数据。 通过执行a=chop(t)就像将函数的引用存储在变量中一样。 因此,每当我们调用a时,我们都会执行chop()函数。