>source

2D 파이썬 목록을 반복하고 싶습니다. 그러나 비어 있지 않은 2D 배열과 비어 있지 않은 2D 배열을 반복 할 때 차이를 발견했습니다. 예를 들면

   mat = [[]] * n
    print("initial", mat)
    
    count = 0
    for row in mat:
        print("row:", row)
        for _ in range(2):
            print(_)
            row.append(count)
            count += 1
            print(mat)
        print("\n")
    return mat
mat = empty(2)

이것이 인쇄하는 것입니다. 하나가 아닌 두 하위 배열에 개수를 추가합니다.

initial [[], []]
row: []
0
[[0], [0]]
1
[[0, 1], [0, 1]]
row: [0, 1]
0
[[0, 1, 2], [0, 1, 2]]
1
[[0, 1, 2, 3], [0, 1, 2, 3]]

그러나 코드를 이것으로 변경하면

def nonempty(n):
    mat = [['a'],['b']]
    print("initial", mat)
    
    count = 0
    for row in mat:
        print("row:", row)
        for _ in range(2):
            print(_)
            row.append(count)
            count += 1
            print(mat)
        print("\n")
    return mat
mat = empty(2)

이것이 인쇄하는 것입니다.

initial [['a'], ['b']]
row: ['a']
0
[['a', 0], ['b']]
1
[['a', 0, 1], ['b']]
row: ['b']
0
[['a', 0, 1], ['b', 2]]
1
[['a', 0, 1], ['b', 2, 3]]

이 경우 두 개 대신 한 번에 하나의 하위 배열 만 변경합니다. 왜 이런 일이 일어나고 있는지 말해 줄 수 있습니까? 파이썬 목록이 작동하는 방식 때문입니까?

  • 이전 javascript - 다음 작업 (가져 오기)을 수행하기 전에 모든 요청이 완료되기를 기다리는 방법
  • 다음 python - pyspark - 항목이 상위 5 개 인기 항목에 있는지 확인