2013-04-19 1 views
0

나는 aa=[ [] for i in range(10)]과 같은 목록을 만들고 각 요소에 대한 할당을 원합니다!왜 python2.7에서 같은 결과를 얻을 수 있습니까? 목록의 각 요소에 대한 할당에 대해

두 가지 방법으로이 작업을 수행 할 수 있지만 하나의 메톤이 작동하고 다른 메탄이 작동하지 않을 수 있습니다. 그 이유는 알 수 없습니다.

알려주세요. 감사!

aa=[ [] for i in range(10)] 

방법 1 : 원하는대로 작동하지 않습니다.

for a in aa:a=[2] it get the result [[], [], [], [], [], [], [], [], [], []] 

방법 2 : 원하는대로 작동 할 수 있습니다.

for index,a in enumerate(aa): print aa[index] is `a` 

과 결과가 모두 사실이다 :

for i in range(len(aa)): aa[i]=[2] 

는 결과

[[2], [2], [2], [2], [2], [2], [2], [2], [2], [2]] 

를 얻을 나는 또 다른 시험을한다.

나는 aaa[i]이 같지만 대답을 찾을 수 없다고 생각합니다.

+0

이 매우 명확하지입니다. "각 요소에 대한 할당"이란 무엇을 의미합니까? –

답변

1

여기에서 :

for a in aa: 
    a = [2] 

그냥 목록 반복 생성 a라는 지역 변수에 실제 aa 목록에 할당하지 않는; 변수 a은 이전에 aa 안의 위치를 ​​가리키고 있었지만 이제는 변수 값을 변경하면서 [2]을 할당했지만 aa은 전혀 수정하지 않았습니다. 그것이 작동하지 않는 이유입니다. 한편, 여기에서 : 값 [2]aa[i] 위치에 할당됩니다 있도록

for i in range(len(aa)): 
    aa[i] = [2] 

당신은 aa 내부의 위치를 ​​수정 정말이야.

+0

정말 고마워! 내가 대답을 얻은 것 같아! – EricLee

2

첫 번째 루프가 차례로 aa의 각 요소에 a를 할당하지만, = 전혀 aa에 영향을 미치지 않는 a을 할당합니다.

두 번째 루프는 aa을 직접 수정하므로 예상대로 작동합니다.

는 첫 번째 효과를 보여 테스트 조금 변경하려면

for index,a in enumerate(aa): 
    print aa[index] is a # should print 'True' 
    a = [2] 
    print aa[index] is a # should print 'False' because you've reassigned a 
+0

도움을 주셔서 감사합니다. 말씀 드리고 결과도 동일하지만 왜 그렇게됩니까? 첫 번째 루프에서 얻을 수있는 요소는 읽을 수만 있습니까? – EricLee

관련 문제