그래서 목록 목록의 특정 목록 요소를 오른쪽으로 이동시키는 코드를 작성하고 있습니다.함수 호출 중 매개 변수 업데이트
def right(state,index):
r_state=state
new_state = []
for j in range(1,len(r_state[index])):
new_state.append(r_state[index][j-1])
new_state.insert(0, r_state[index][-1])
r_state[index]=new_state
return r_state
#case1
for i in range(2):
print(right([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], i))
#case2
def printer(node):
for i in range(2):
print(right(node, i))
printer([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
경우 (1)가 나에게 내가 원하는 출력을 제공합니다 (인덱스에 해당하는 하나 개의 하위 목록 변경) :
[[4, 1, 2, 3], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
[[1, 2, 3, 4], [8, 5, 6, 7], [9, 10, 11, 12], [13, 14, 15, 16]]
그러나 케이스 (2) 목록 내 목록을 업데이트 끝
[[4, 1, 2, 3], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
[[4, 1, 2, 3], [8, 5, 6, 7], [9, 10, 11, 12], [13, 14, 15, 16]]
목록이 업데이트되는 이유는 무엇입니까? 또한 케이스 1과 동일한 출력을 얻기 위해 케이스 2를 어떻게 수정할 수 있습니까?
명시 적으로 목록에 돌연변이를하기 때문에 함수에 전달합니다. 'r_state = state' *는 복사본을 만들지 않습니다. 할당은 결코 파이썬에서 사본을 만들지 않습니다 * –
또한,'printer' 함수는 이미'print'를 사용하고 있습니다. 그래서 함수를 호출 한 결과를'print'하면 함수는 아무 것도 돌려주지 않기 때문에'None'이됩니다. –
왜'r_state = state'를 사용합니까? – roganjosh