0
초기화 :나는 이것이 버그인지 모르거나 내가 배열에서 * 토큰의 잘못된 의미 론적 의미를 가지고 매트릭스 python3
>>> arr = [None] * 5 # Initialize array of 5 'None' items
>>> arr
[None, None, None, None, None]
>>> arr[2] = "banana"
>>> arr
[None, None, 'banana', None, None]
>>> # right?
...
>>> mx = [ [None] * 3 ] * 2 # initialize a 3x2 matrix with 'None' items
>>> mx
[[None, None, None], [None, None, None]]
>>> # so far, so good, but then:
...
>>> mx[0][0] = "banana"
>>> mx
[['banana', None, None], ['banana', None, None]]
>>> # Huh?
는이 버그, 아니면 내가 잘못 의미를 가지고 않았다 __mult__
토큰의 의미는 무엇입니까?
그래서, 다음 정확히'*'토큰의 의미는 무엇입니까? 객체의 참조를 복사하면 첫 번째 부분에서 arr [2] = "banana"를 전달할 때 그 목록이'[ 'banana', 'banana', 'banana' ','banana ','banana ']'가 아니라 위의 하나. – user2804578
오, 그냥 [다른 곳에 StackOverflow] (http://stackoverflow.com/questions/9658459/initializing-matrix-in-python-using-0xy-creates-linked-rows/9658522#9658522) 대답에 부딪 혔습니다. '*'토큰이 다른 기본 데이터 타입과 같은 의미를 가지고 있지 않다는 것을 알게되었습니다. – user2804578
실제로 같은 의미를 가지고 있습니다. 변경할 수없는 유형의 경우 "복사 중"과 같은 작업을 수행하면 항상 동일한 값이 할당 된 새 객체가 만들어 지지만 변경 가능한 객체는 참조가 복사됩니다. 타입이 불변 인 것을 의미하는 것에 대한 더 좋은 독서가 있습니다. http://stackoverflow.com/questions/8056130/immutable-vs-mutable-types-python – Ben