첫 번째와 두 번째 줄의 연산자(+와 *)는 리스트 항목 간 복사본을 만든다(3.7절에서 더 자세히 알아볼 것이다). 지금까지는 얕은 복사(shallow copy)를 사용해도 큰 문제가 없다. 하지만 3.18절에서 살펴볼 다차원 배열을 다룰 때는 문제가 생길 것이다.
다음 코드를 실행해 보자.
a_list = [1, 3, 5, 0, 2]
b_list = a_list # 별칭 생성
c_list = a_list[:] # 항목 간(member-by-member) 복사
변수 이름 b_list는 a_list의 별칭일 뿐이다. 하지만 세 번째 줄의 코드는 데이터의 새로운 복사본을 만든다. a_list가 수정되어도 c_list는 기존 값을 유지한다.
곱하기 연산자(*)는 큰 리스트와 작업할 때 특히 유용하다. 1,000개의 항목이 모두 0인 리스트를 만들려면 어떻게 해야 할까? 가장 편리한 방법을 확인해 보자.
big_array = [0] * 1000
모든 리스트는 서로 같거나(==), 같지 않다는 것(!=)을 테스트할 수 있다. 리스트의 모든 항목 값이 동일하면 == 테스트는 True를 반환한다. 반면 크기 비교 연산자(<, > 등)를 사용하려면 각 항목의 데이터 타입이 항목 간에 크기를 비교할 수 있어야 한다. 그리고 정렬을 하려면 a < b 혹은 b < a의 테스트 결과가 정의되어 있어야 한다(9.10.3절 참고).