相关疑难解决方法(0)

附加到Python中的2D列表

我遇到了我认为Python中的一个奇怪的行为,我希望有人在可能的情况下解释它.

我创建了一个空的2D列表

listy = [[]]*3

print listy

[[], [], []]
Run Code Online (Sandbox Code Playgroud)

以下工作正如我所料:

listy[1] = [1,2] 产量 [[], [1,2], []]

listy[1].append(3) 产量 [[], [1,2,3], []]

但是,当我附加到其中一个空列表时,python会附加到所有子列表,如下所示:

listy[2].append(1)收益率[[1], [1,2,3], [1]].

谁能向我解释为什么会出现这种情况?

python list

31
推荐指数
2
解决办法
9万
查看次数

嵌套列表索引

我在Python中使用嵌套列表时遇到了一些问题.

基本上,我有一个包含所有0值的2D列表,我想在循环中更新列表值.

但是,Python不会产生我想要的结果.有什么我误解range()和Python列表索引?

some_list = 4 * [(4 * [0])]
for i in range(3):
    for j in range(3):
        some_list[i+1][j+1] = 1
for i in range(4):
    print(some_list[i])
Run Code Online (Sandbox Code Playgroud)

我期望的结果是:

[0, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

但是Python的实际结果是:

[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

python python-3.x

11
推荐指数
2
解决办法
4112
查看次数

Python引用如何工作?

我对Python引用感到困惑.请考虑以下示例:

我的任务:编辑列表中的每个元素

d = { 'm': [1,2,3] }
m = d['m']
m = m[1:]   # m changes its reference to the new sliced list, edits m but not d (I wanted to change d)
Run Code Online (Sandbox Code Playgroud)

同理:

d = { 'm': [1,2,3] }
m = d['m']
m = m[0]    # As per python referencing, m should be pointing to d['m'] and should have edited d
Run Code Online (Sandbox Code Playgroud)

在python中,一切都是通过引用,然后何时创建一个新对象?我们是否始终需要copydeepcopycopy模块制作对象副本?

请澄清.

python reference pass-by-reference pass-by-value

5
推荐指数
2
解决办法
3011
查看次数