매우 어리석은 질문이지만 정말 혼란 스럽습니다. 제발 내 코드 좀 봐 :슬라이스 중첩 목록
>>> my_list = [1, 2, 3]
>>> my_list_new = my_list[:]
>>> my_list_new[0] = 100
>>> my_list_new
[100, 2, 3]
>>> my_list
[1, 2, 3]
그래서 그것은해야대로 작동합니다. 나는 my_list
을 복사했다. my_list_new
을 변경했을 때 하나의 목록 만 변경되었습니다.
지금 이쪽을 봐 : 당신이 볼 수 있듯이
>>> my_list2 = [[1, 2, 3], [4, 5, 6]]
>>> my_list_new2 = my_list2[:]
>>> my_list_new2[0][0] = 100
>>> my_list_new2
[[100, 2, 3], [4, 5, 6]]
>>> my_list2
[[100, 2, 3], [4, 5, 6]]
나는 my_list_new2
을 변경하지만 두 목록이 변경되었습니다. 중첩 된 목록에 대한 일반적인 파이썬 동작입니까? 어떻게 피하는가?
다음 두 가지 좋은 답변이 있습니다. 자세한 내용은 https://docs.python.org/2/library/copy.html#module-copy를 참조하십시오. 목록이 중첩 된 경우 'deepcopy'를 수행해야합니다. 그렇지 않으면 중첩 목록에 대한 참조 만 복사 됨. –
레퍼런스 만 복사하는 것을 피하기 위해 슬라이스 구문을 사용해야한다는 것을 아는 것처럼 보입니다. 그래서 그 문법이없는 "복사 된"리스트, 즉 내부의 것 같은리스트가 왜 복사되었는지는 놀랍지 않습니다. 참조로. – TigerhawkT3