python中改变list中list值的问题

</pre><pre name="code" class="python">L = []
s = [0,0,0]

for i in range(3):
    L.append(s)
L[1][1]=1
print L

如上代码,定义一个空list,添加元素也为list类型。本意是想改变list L中一个值,使其结果为[[0,0,0],[0,1,0],[0,0,0]],但运行的结构下图所示,将list L中的所有元素都改变了。


为找到原因,查看python的官方网站https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange,找到原因。如下图


list s 的值并没被copy到L中,L中的元素只是s的一个引用,且每个值都是指向s,所以改变一个值,会改变所有的值。

为了得到结构,本人使用了深度复制,将要修改的元素复制出来,修改后在复制回去。代码和结构如下


import copy

L = []
s = [0,0,0]

for i in range(3):
    L.append(s)
m = copy.deepcopy(L[1])
m[1]=1
L[1]=m
print L

本文如果有不对和可以改进的地方,希望可以读者可以提出。特别是如果有更简便的方法,希望可以告知,一起学习

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值