我遇到了我认为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中使用嵌套列表时遇到了一些问题.
基本上,我有一个包含所有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引用感到困惑.请考虑以下示例:
我的任务:编辑列表中的每个元素
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中,一切都是通过引用,然后何时创建一个新对象?我们是否始终需要copy并deepcopy从copy模块制作对象副本?
请澄清.