저는 파이썬에 익숙하지 않고 list
을 set
에 추가하는 데 걸림돌이되었습니다. 이제 나는 reason이 무엇인지 알지 못합니다. list
이 변경 가능하므로 hashcode
(또는 Python 해당 개념)이 변경됩니다. Java 프로그래밍에 비추어 볼 때, 필자는 이것을 여러 번 해왔습니다.세트 목록 추가는 자바에서는 가능하지만 파이썬에서는 가능하지 않습니까?
HashSet<ArrayList<String>> masterCollection = new HashSet<ArrayList<String>>();
ArrayList<String> a = new ArrayList<String>();
masterCollection.add(a);
a.add("Hello, World");
for(ArrayList<String> list : masterCollection) {
// do something to list
}
위 코드의 비정상적인 동작을 발견하지 못했습니다. 심지어 ArrayList
을 HashMap
의 키로 사용하고 내 작업을 완료하는 데 성공했습니다.
따라서이 기사에서는 Java에서 내부적으로 파이썬이 어떻게 다른지와 위의 코드를 작성할 때주의해야 할 것이 있는지 묻고 싶습니다.
언어가 다릅니다. 모든 언어가 동일한 용어를 사용하더라도 동일한 방식으로 작동하지 않습니다. – Kayaman
@ 카야 만 나는 그들이 다르다는 것을 알고 있으며 나는이 차이를 알고 있습니다. 파이썬이 그렇지 못하더라도 자바가 어떻게 이뤄지는 지 알고 싶다. 이제는 파이썬이 작동하는 방식이 더 합리적인 것처럼 보입니다.'set'은 항상 그 요소의 'hashcode'를 모니터링하고 이에 따라 변경해야 할 책임이 없습니다. 그러나 요소가 바뀔 때마다'hashList' 변경을보고하는'ArrayList '메커니즘이 있다고 생각하지 않습니다. 어떻게 작동합니까? – zyl1024
'HashSet'(또는 유사한 해시 관련 구문)에있는 동안 객체가 해시 코드를 변경하면 결과가 정의되지 않는다는 것은 알려진 사실입니다. 그래서 불변의 것을 넣어야 만합니다. – Kayaman