Python 替换所有列表元素而不是 for 循环中的索引列表元素

Python replacing all list elements instead of the indexed list element in for loop

我想替换列表中第k个元素的第k个元素

例如,

[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]

[[1, 0, 0],
 [0, 1, 0],
 [0, 0, 1]]

但 python 似乎不想这样做,而是替换每个元素的每个值。

我运行这个:

    # Triangle Vertices
    V = [[0, 1], [-1, 0], [1, 0]]
    
    # Triangles (indices of V in clockwise direction)
    T = [[1, 0, 2]]
    
    # Creating sub-triangles
    bary_point = [0, 0.5]
    
    v_list = []
    
    for t in T:
        print(t)
        for k in range(3):
            v_list.append(V)
            v_list[k][k] = bary_point # <-- This line
    
    print('v_list: ')
    print(v_list)

它产生这个:

v_list:
[[[0, 0.5], [0, 0.5], [0, 0.5]],
 [[0, 0.5], [0, 0.5], [0, 0.5]],
 [[0, 0.5], [0, 0.5], [0, 0.5]]]

但是我想要这个:

v_list:
[[[0, 0.5], [-1, 0],  [1, 0]],
 [[0, 1],   [0, 0.5], [1, 0]],
 [[0, 1],   [-1, 0],  [0, 0.5]]]

我做错了什么吗?我在 Python 3.10.0

谢谢。

编辑解决方案: 变化

v_list.append(V)

v_list.append(V.copy())

谢谢!

您正在将相同的引用附加到列表 V,而当您更改 v_list[k][k] 时,您正在更改 V,一种解决方案是附加列表的副本,通过使用 V.copy() 作为 append.

的参数