그래서, 나는이 이해 :슬라이스 할당, 얕은/깊은 사본
a_list = [1,2,3]
b_list = [5,6,7]
a_list.append(b_list)
a_list는 현재 [1,2,3, [5,6,7]]
c_list = a_list[:]
b_list[0] = 1000
print(a_list, c_list)
a_list c_list이 [1,2,3,[1000,6,7]]
입니다 [1,2,3,[1000,6,7]]
a_list
및 c_list
은 b_list
이 a_list
에 추가 된 경우 [5,6,7]
을 나타내고, b_list
으로 변경하면 a_list
및 c_list
으로 변경됩니다. 좋습니다.
문제
당신이있을 때입니다 :a_list = [1, 2, [1,5,0]]
b_list = a_list[:]
a_list[2][1] = 90000
print(a_list, b_list)
a_list
는 [1, 2, [1, 90000, 0]]
하고 b_list
는 [1, 2, [1, 90000, 0]]
입니다.
b_list
은 왜 변경 되었습니까? b_list
은 참조가있는 경우 실제 개체가 아닌 참조를 복사하는 a_list
의 단순 복사본입니다. 그러나 a_list
에는 copy에 대한 언급이 없습니다. 정확한 값, 숫자 목록 및 b_list
은 완전히 다른 값이므로 a_list의 일부 값이 변경된 경우 변경해서는 안되며 b_list
은 할당을 통해 a_list
을 가리키고 있지 않습니다.
중첩 목록은 여전히 * 참조입니다. 변수는 명명 된 참조이며 목록의 색인은 번호가 매겨진 참조입니다. –
얕은 사본은 요소가 원래 목록의 요소와 동일한 새 목록입니다 (* 요소 사본 제외). 재귀 적으로 요소를 복사하려면'copy.deepcopy'를 사용하십시오. –