python 시퀀스 를 빠르게 복사 하 는 방법

3425 단어 python시퀀스
기본 용법
서열 을 하나의 정수 로 곱 하면 새로운 서열 이 생 긴 다.이 새 서열 은 원본 서열 이 정수 부 를 복사 한 후에 다시 연결 한 결과 이다.

l=[1,2,3]
l2=l * 3
logging.info('l2 -> %s',l2)
l3=5 * 'deniro'
logging.info('l3 -> %s',l3)
실행 결과:
INFO - l2 -> [1, 2, 3, 1, 2, 3, 1, 2, 3]
INFO - l3 -> denirodenirodenirodenirodeniro
*복제 문법 은 기 존의 조작 대상 을 수정 하지 않 고 새로운 서열 을 구축한다.
2 리스트 함정
a*n 문법 에서 a 는 목록 이 고 n 은 복사 할 목록 수 입 니 다.a 목록 의 요소 가 기본 형식 이 라면 문제 없습니다.그러나 a 목록 의 요소 가 대상 의 인용 이 라면 복 사 된 목록 의 인용 은 같은 인용 을 가리 키 고 있 습 니 다.
Luciano Ramalho 는 우물 바둑 의 예 를 들 었 다.
영어 이름 은 틱-택-토(Tic-Tac-Toe)로 3*3 칸 에서 진행 되 는 구슬 치기 게임 으로 오목 과 유사 하 며,바둑판 은 일반적으로 테 두 리 를 그리 지 않 고 격자 선 이 우물 글자 로 배열 되 어 있어 이름 을 얻 었 다.게임 에 필요 한 도 구 는 종이 와 펜 에 불과 하 며,그 다음 에 각각 O 와 X 를 대표 하 는 두 명의 놀이 꾼 이 돌아 가면 서 칸 에 표 시 를 남기 고(일반적으로 선 수 는 X),임의의 세 개의 표시 가 하나의 직선 을 이 루 면 승리 한다.

(1)오류 예시 1

weird_board = [['_'] * 3] * 3
logging.info('weird_board -> %s', weird_board)
weird_board[1][2] = 'X'
logging.info('weird_board -> %s', weird_board)
실행 결과:
INFO - weird_board -> [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
INFO - weird_board -> [['_', '_', 'X'], ['_', '_', 'X'], ['_', '_', 'X']]
코드 에서[1][2]위치의 값 만 수 정 했 지만 세 군데 에 영향 을 미 친 것 을 볼 수 있다.이것 은 이 세 곳 이 사실은 같은 인용 을 가리 키 고 있다 는 것 을 설명 한다.
(2)오류 예시 2
이 예제 가 저 지 른 잘못 은 이전 예제 와 마찬가지 로 같은 대상 을 같은 게임 판 에 추가 하 는 것 이다(board).

row = ['_'] * 3
board = []
for i in range(3):
  board.append(row)
logging.info('board -> %s', board)
board[1][2] = 'X'
logging.info('board -> %s', board)
실행 결과:
INFO - board -> [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
INFO - board -> [['_', '_', 'X'], ['_', '_', 'X'], ['_', '_', 'X']]
(3)정확 한 예시
예시 2 를 개조 하면 상술 한 문 제 를 피 할 수 있다.

board = []
for i in range(3):
  row = ['_'] * 3
  board.append(row)
logging.info('board -> %s', board)
board[1][2] = 'X'
logging.info('board -> %s', board)
실행 결과:
INFO - board -> [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
INFO - board -> [['_', '_', '_'], ['_', '_', 'X'], ['_', '_', '_']]
여기 row=['']*3 for 순환 에 넣 으 면 순환 할 때마다 row 를 새로 만 들 고 게임 판 에 넣 습 니 다.이렇게 게임 판 의 모든 단원 격 은 독립 적 이 고 서로 영향 을 주지 않 는 다.
목록 유도 방법 을 이용 하여 예시 코드 를 간소화 할 수 있다.

board = [['_'] * 3 for i in range(3)]
logging.info('board -> %s', board)

board[1][2] = 'X'
logging.info('board -> %s', board)



이상 은 python 이 시퀀스 를 어떻게 빠르게 복사 하 는 지 에 대한 상세 한 내용 입 니 다.python 복사 시퀀스 에 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!

좋은 웹페이지 즐겨찾기