我是一名网络工程师,他试图将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制作
答案 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()
函数。