python 의 목록 과 원 그룹 차이 분석
list 와 tuple 은 임의의 데이터 형식 을 배치 할 수 있 는 질서 있 는 집합 으로 숫자,문자열,대상 등 을 저장 할 수 있 습 니 다.
list 와 tuple 은 모두 마이너스 색인 을 지원 합 니 다.
In [8]: nums[-2]
Out[8]: 'ad'
In [9]: tp[-2]
Out[9]: '33'
list 와 tuple 은 모두 절편 작업 을 지원 합 니 다.
In [10]: nums[1:3]
Out[10]: [3, 'ad']
In [11]: tp[1:3]
Out[11]: (3, '33')
list 와 tuple 은 마음대로 끼 워 넣 을 수 있 습 니 다.In [12]: nums = [[1,2,3],['s','ff'],['34',3,5]]
In [13]: tp = ((23,4,'f'),45,'d',('dd',4,'ff'))
list 와 tuple 의 차이 점
4.567917.목록 은 동적 이 고 길이 의 크기 가 고정 되 지 않 으 며 임의로 요 소 를 증가,삭제,수정 할 수 있 습 니 다.
4.567917.원 조 는 정적 이 고 길 이 는 초기 화 할 때 변경 할 수 없 으 며 요 소 를 추가,삭제,수정 할 수 없습니다
그림 에서 보 듯 이 우리 가 list 를 수정 하 는 것 은 성공 적 이지 만 tuple 을 수정 할 때 오류 가 발생 했 습 니 다.tuple 을 바 꾸 려 면 어떻게 해 야 합 니까?메모리 하 나 를 다시 열 고 새로 온 tuple 을 다시 만 들 수 밖 에 없습니다.
tuple 의 소스 코드 에서 도 알 수 있 듯 이 두 가지 자체 적 인 방법 만 있 고 하 나 는 통계 요소 가 나타 난 횟수 이 며 하 나 는 요 소 를 조회 하 는 색인 이다.
list 와 tuple 저장 방식 의 차이
예 를 들 어 보 겠 습 니 다.
In [19]: nums=['a',1,2]
In [20]: tp=('a',1,2)
In [21]: nums.__sizeof__()
Out[21]: 64
In [22]: tp.__sizeof__()
Out[22]: 48
여기에 list 와 tuple 을 만 들 었 습 니 다.그들 이 저장 한 내용 은 같다.sizeof__방법 은 시스템 분배 공간의 크기 를 인쇄 할 수 있다.그들 이 사용 하 는 메모리 공간 이 다 르 고 저 장 된 내용 이 같 지만 list 는 tuple 보다 16 개의 메모 리 를 더 많이 사용 하 는 것 을 볼 수 있 습 니 다.먼저 한 배열 의 메모리 배분 과정 을 살 펴 보 겠 습 니 다.
In [23]: l=[]
In [24]: l.__sizeof__() // 40
Out[24]: 40
In [25]: l.append('a') // , 72 , 8
// 4
In [26]: l.__sizeof__()
Out[26]: 72
In [27]: l.append('b') // ,
In [28]: l.__sizeof__()
Out[28]: 72
In [29]: l.append('c') // ,
In [30]: l.__sizeof__()
Out[30]: 72
In [31]: l.append('d') // ,
In [32]: l.__sizeof__()
Out[32]: 72
In [33]: l.append('e') // , ,
In [34]: l.__sizeof__()
Out[34]: 104
이 를 통 해 알 수 있 듯 이 list 는 메모리 의 사용 상황 을 실시 간 으로 추적 할 수 있 도록 공간 이 부족 할 때 와 추가 공간 을 분배 하고 추가 적 으로 메모 리 를 많이 분 배 했 으 며 지침 을 저장 하여 해당 하 는 요 소 를 가리 키 는 것 도 필요 하 다.우 리 는 매번 작업 할 때 공간 분배 의 비용 을 증가/삭제 하기 위해 Python 이 공간 을 분배 할 때마다 추가 로 분배 하 는 것 을 볼 수 있다.이러한 메커니즘(over-allocating)은 작업 의 효율 성 을 확보 했다.증가/삭제 의 시간 복잡 도 는 모두 O(1)이다.하지만 원 조 에 대해 서 는 상황 이 달 라 졌 다.원본 길이 의 크기 가 고정 되 어 있 고 요소 가 변 할 수 없 기 때문에 저장 공간 이 고정 되 어 있 습 니 다.
그래서 대량의 데 이 터 를 저장 할 때 이런 차 이 는 고려 해 야 한다.만약 에 데이터 가 변 경 될 가능성 이 크 지 않 으 면 원 그룹 으로 저장 하고 데이터 가 빈번하게 데 이 터 를 수정 하고 증가 해 야 한다 면 목록 을 사용한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.