반응형
목록 초기화용 이 코드가 목록을 서로 링크하는 이유는 무엇입니까?
n길이의 리스트를 초기화하려고 합니다.
x = [[]] * n
그러나, 이것은 어떻게든 리스트를 서로 연결시킨다.
>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]
저는 다음과 같은 것을 기대하고 있습니다.
[[], [0], []]
좋은 생각 있어요?
문제는 기억 속에 있는 모든 목록이 똑같다는 거예요.를 사용하는 경우[x]*n
구문은 다음과 같습니다.n
많이x
모두 같은 오브젝트에 대한 참조입니다.뚜렷한 예는 아니지만n
같은 인스턴스에 대한 참조.
3개의 다른 리스트를 작성하려면 , 다음의 순서에 따릅니다.
x = [[] for i in range(3)]
이를 통해 3개의 개별 인스턴스가 제공됩니다.[]
그게 네가 원하는 거야
[[]]*n
와 유사하다
l = []
x = []
for i in range(n):
x.append(l)
하는 동안에[[] for i in range(3)]
는 다음과 같습니다.
x = []
for i in range(n):
x.append([]) # appending a new list!
In [20]: x = [[]] * 4
In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object
In [22]: x=[[] for i in range(4)]
In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time
언급URL : https://stackoverflow.com/questions/12791501/why-does-this-code-for-initializing-a-list-of-lists-apparently-link-the-lists-to
반응형
'programing' 카테고리의 다른 글
GCC 플러그인에 내장 함수를 추가하는 방법 (0) | 2022.10.19 |
---|---|
Eclipse: 어설션 활성화 (0) | 2022.10.19 |
라이브러리가 로드되지 않음: mysql2 gem을 사용하여 OS X 10.6에서 'rails server'를 실행하려고 하면 libmysqlclient.16.dylib 오류가 발생함 (0) | 2022.10.19 |
JavaScript에서 setInterval 호출 중지 (0) | 2022.10.19 |
node.js를 사용하여 mySQL에 대량 삽입하려면 어떻게 해야 합니까? (0) | 2022.10.19 |