python中修改列表

a = [1, 2, 3]
def lop(a):
    b = [7]
    a = b[:]


lop(a)
print(a)

本希望在lop函数内将b列表的值复制到a列表中,但最后的执行效果a没有改变:

[1, 2, 3]
[Finished in 0.8s]

这跟python对变量和对象定义的有关,参考

https://www.cnblogs.com/ifantastic/p/3811145.html

在函数lop中,a指向了b的列表,但函数结束后,a仍旧是原来自己的指向列表。

a = [1, 2, 3]


def lop(a):
    print('函数内列表ID1:' + str(id(a)))
    b = [7]
    a = b
    print('函数内列表ID2:' + str(id(a)))
    print(a)
    print('函数内列表ID3:' + str(id(a)))


print('函数外列表ID1:' + str(id(a)))
lop(a)
print('函数外列表ID2:' + str(id(a)))
print(a)

列表变化:

函数外列表ID1:2241163561864
函数内列表ID1:2241163561864
函数内列表ID2:2241164455240
[7]
函数内列表ID3:2241164455240
函数外列表ID2:2241163561864
[1, 2, 3]
[Finished in 0.8s]

所以在函数内需要修改列表,不能通过列表复制的方式,只能修改当前列表的值,pop、append、a[0]=2等操作。

猜你喜欢

转载自www.cnblogs.com/xuzhongjie/p/9754726.html
今日推荐