吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 815|回复: 13
收起左侧

[求助] 萌新求助python二维列表赋值问题

[复制链接]
x446187 发表于 2022-11-4 20:54
代码如下,创建一个二维列表,我只想赋值这个列表list_test[0][1]=1,但是为什么结果每1行第1列都被赋值为1了?
[Python] 纯文本查看 复制代码
list_test = [[0, 0, 0, 0, 0]]*10
list_test[0][1] = 1

print(list_test[0][1])
print(list_test)


打印结果如下:
[Python] 纯文本查看 复制代码
1
[[0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0]]

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| x446187 发表于 2022-11-4 20:55
怎么才能实现我上面那种单独赋值给某个元素呀?
jidesheng6 发表于 2022-11-4 23:54
贴一下官方原文:
Note also that the copies are shallow; nested structures are not copied. This often haunts new Python programmers; consider:

>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]
What has happened is that [[]] is a one-element list containing an empty list, so all three elements of [[]] * 3 are (pointers to) this single empty list. Modifying any of the elements of lists modifies this single list. You can create a list of different lists this way:

>>>
>>> lists = [[] for i in range(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[3], [5], [7]]


大概意思就是说你的list_test*3创建的其实是list_test的三个引用,只要你改变一个,其他的就跟着改变了,创建方式错了,要么手动创建要么用官方给的方式批量创建:
cshadow 发表于 2022-11-5 01:01
[Python] 纯文本查看 复制代码
list_test = [[0, 0, 0, 0, 0]]*10
list_test[0] = [0, 1, 0, 0, 0]
 
print(list_test[0][1])
print(list_test)

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
zhaoqingdz + 1 我很赞同!
laoda1228 + 1 + 1 我很赞同!

查看全部评分

无闻无问 发表于 2022-11-5 07:20
列表是引用传递,复制也是,三个指向同一位置…
可用二楼方法,也可以用copy.Copy方法…
三滑稽甲苯 发表于 2022-11-5 08:47
用*创建的列表引用的是地址,改了一个其他自然会变
头像被屏蔽
735882888 发表于 2022-11-5 11:37
提示: 作者被禁止或删除 内容自动屏蔽
jjjzw 发表于 2022-11-5 15:57
深浅拷贝的问题,经常在嵌套列表中遇到;深拷贝会分配新的内存储存对象,浅拷贝只是引用了原对象在内存中的地址
列表list_test中存储的其实是对列表[0,0,0,0,0]的内存储存的地址,在*10操作时只是把地址复制了10遍,是浅拷贝,因此在对[0,0,0,0,0]修改时,所有引用该地址的内容都会改变。
4f的方法是把要改的嵌套列表换了个新的,其他没改的其实还是相同的地址
要每个子对象都独立的话,大概还得逐个append
 楼主| x446187 发表于 2022-11-6 00:05
jidesheng6 发表于 2022-11-4 23:54
贴一下官方原文:
Note also that the copies are shallow; nested structures are not copied. This ofte ...

很专业详细,感谢
 楼主| x446187 发表于 2022-11-6 00:06
cshadow 发表于 2022-11-5 01:01
[mw_shl_code=python,true]list_test = [[0, 0, 0, 0, 0]]*10
list_test[0] = [0, 1, 0, 0, 0]

多谢,很方便
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 06:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表