A리스트와 B리스트를 복사하고 싶으신건가요?
제가 이해한게 맞다면...
얕은 복사 / 깊은 복사 개념을 찾아보시면 좋을거같아요.
쉽게 말해서 C의 포인터처럼, B = A처럼 적으면 A라는 리스트가 가리키는 주소값을 B에도 저장하게 되어서 같은 리스트의 이름이 두개가되는 느낌이 되는거죠.
이를 해결하는 방법으로는 deepcopy 모듈을 사용하거나,
B = A[:] 와 같이 적어서 A의 모든 원소로 이루어진 새로운 리스트를 B에 저장해주는 방법이 있습니다.
도움이 되셨으면 좋겠네요!
celina324 1년 전
# !!! 이 두 부분
A = len(Nlist)가 아니라 원래 A = Nlist 였습니다.
중간에 Nlist의 값을 건드리는 코드가 있는데, 만약 이게 건드려지지 않는다면 이프문으로 반복문을 나갈 생각으로
코드 이전 Nlist를 A에 저장해서 비교하려 했습니다
그런데 Nlist가 바뀌면 A 값도 같이 바뀌어버리는 일이 일어났습니다..
A에 B를 넣었는데,
B가 바뀌면,
A도 바뀌어버린다.
1. "A에 B를 넣었는데," 가 'B에 들어있었던 값을 넣은 것' 이라는 게 제 생각이었고
2. "A에 B를 넣었는데," 가 'B 자체를 넣은 것' 이라는 게 제가 짠 코드에서 일어나는 일인 것 같습니다..
이런 설정을 Call by reference / call by value 로 분류하는 것 같아서 찾아봤는데 파이썬은 둘 다 아니고 Call by assignment라고 합니다..
B = [1, 2]
A = B
B.pop(1)
print(A, B)
# [1] [1] 출력됨으로 2번 내용처럼 나오고
B = [1, 2]
A = B
B = [3, 4]
print(A, B)
# [1, 2] [3, 4] 출력됨으로 1번 내용처럼 나옵니다..
어떻게 이해해야 할지도 모르겠고 어디에 물어봐야 될지도 모르겠어서 여기 글 남깁니다.. 한번만 도와주세요 고수님들!
참고로 코드도 99퍼센트에서 틀렸습니다 나옵니다 ㅎㅎ 반례도 찾아주시면 감사하겠어요ㅎㅎ ㅠ..