python에서 [0]*2와 0*2의 차이점 설명

1713 단어 python[0]*20*2

프로그램 용례:


a=[[1,2],[4,5]]
b=[0]*len(a)
d=0*len(a)
print("len(a)=",len(a))
print("b=",b)
print("d=",d)
print(2*[1,2])
print([1,2]*2)
출력은 다음과 같습니다.
len(a)= 2
b= [0, 0]
d= 0
[1, 2, 1, 2]
[1, 2, 1, 2]
행렬 뒤에 있는 한 개의 수는 그것을 몇 번 복제하는 것과 같다는 것을 알 수 있다.
보충: 2차원 그룹 만들기 및python에서 [0]*n과 [0 for_ inrange(n)]의 차이와 연계

1. 심층 복사본으로 얕게 복사


직접 부여: 사실은 대상의 인용 (별명) 입니다.
얕은 복사(copy): 부모 대상을 복사하고 대상의 내부 하위 대상을 복사하지 않습니다.
딥 복사(deepcopy):copy 모듈의 딥 복사 방법은 부모 대상과 하위 대상을 완전히 복사합니다.

구별


[0]*n은 얕은 복사, 즉 하나의 목록을 n회 반복한 것이다. 예=호 복사(얕은 복사가 아니라 = 얕은 복사의list id와 다르다는 것을 주의).[[0]*n]*m 이런 식으로 [0]*n을 m번 복사했어요.
[0 for _ in range(n)] 생성, 딥 카피

n = 4
dp1 = [0] * n
dp2 = [0 for _ in range(n) ]
print('dp1:',dp1)
print('dp2:',dp2)
이 두 사람의 효과는 같다
dp1: [0, 0, 0, 0]
dp2: [0, 0, 0, 0]
3*4의 행렬을 생성하는 2차원 배열, 요소가 모두 0이고 수정(0,2)된 요소의 값이 3이면 다음과 같은 세 가지 방법을 제공합니다.

m,n = 3,4
dp1 = [[0] * n ] * m
dp2 = [[0 for _ in range(n) ] for _ in range(m)]
dp3 = [[0] * n for _ in range(m)]
dp1[0][2] = 3
dp2[0][2] = 3
dp3[0][2] = 3
print('dp1:',dp1)
print('dp2:',dp2)
print('dp2:',dp3)
결과는 다음과 같습니다.
dp1: [[0, 0, 3, 0], [0, 0, 3, 0], [0, 0, 3, 0]]
dp2: [[0, 0, 3, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
dp2: [[0, 0, 3, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
첫 번째 방법은 안 돼요. 줄마다 다른 줄이 바뀌어요.
두 번째, 세 번째 방법은 모두 가능하다
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기