>>> a = 3
>>> b = 3
>>> a = 1
>>> a
1
>>> b
3

3이라는 객체를 a, b 두 개의 변수가 가리키고 있다가 a가 다른 객체 1을 가리키게 됩니다. 그러나 배열은 이런 방법과는 다르게 동작합니다.

1. 일단 배열은 []를 사용할 때 마다 매번 객체를 생성합니다.

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False

2. 다음과 같은 방법으로 같은 배열을 가리키도록 할 수 있습니다.

>>> b = a
>>> a is b
True

하지만 이 때 만약에 a변수를 통해서 배열의 값을 바꾸게 되면 b도 역시 같은 배열 객체를 참조하기 때문에 값이 바뀐 배열을 참조하게 됩니다.

>>> a[0] = 100
>>> b
[100, 2, 3]

단순히 1번과 같은 효과를 가지면서 배열에 있는 모든 값들을 동일하게 가지는 다른 배열을 만드는 방법은 두 가지가 있습니다.

1. [:] 이것을 사용하는 방법과

>>> c = a[:]
>>> a is c
False
>>> c
[100, 2, 3]

2. copy 모듈을 사용하는 방법이 있습니다.

>>> from copy import copy
>>> d = copy(A)
Traceback (most recent call last):
  File “<stdin>”, line 1, in <module>
NameError: name ‘A’ is not defined
>>> d = copy(a)
>>> d
[100, 2, 3]
>>> d is a
False

모듈이라는 것이 나왔는데…. 뭔지 모르겠군요. from copy import copy… copy로 부터 copy를 불러 들인것인가.. 흠.. from 패키지 import 클래스 인가.. 아니면 from 클래스 import 메소드 인가..;;