2011-09-19 5 views
0

나는 다음과 같은 코드가 있습니다 어떤 이유로문제()

def steps(low, hi, n): 
rn = range(n) 
newrn = rn 
print rn #print 1 
for x in rn[:]: 
    print x 
    newrn[x] = float(x)/n 

diff = hi - low 

print newrn 
print rn #print 2 
for y in rn[:]: 
    print y 
    rn.insert(y, (newrn[y] * diff) + low) 

return rn 

을, RN 반환의 내 첫 번째 인쇄 [0, 1, 2]하지만 내 두 번째 인쇄 반환 [0, 0.333, .666]. 왜 rn이 바뀌고 있습니까? 나는 newrn 만 변경하지만 rn도 변경됩니다. 이것은 rn.insert 라인을 실행하려고 할 때 '리스트 인덱스가 float 정수가 아니어야한다'라는 에러를 발생하게한다.

어떤 도움이 필요합니까?

답변

5

이 할당을 할 때 문제가 발생했습니다 : newrn = rn. 이제 newrnrn은 같은 목록을 가리키므로 수정하는 경우 두 가지를 모두 수정하십시오.

대신 newrn = rn[:]을 사용하십시오.

3

이것은 변수가 파이썬에서 작동하는 방식입니다. 거기에서 : (새 목록에 모든 값을 복사하지 않기 때문에, 때로는 좋은)

newrn = rn 

당신은 참조가 아닌 값을 할당하고 있습니다. 동일한 값을 사용하여 새 목록을 만들려면 다음을 수행하십시오.

newrn = list(rn)