>  기사  >  백엔드 개발  >  파이썬에서 직렬화란 무엇입니까? (예시분석)

파이썬에서 직렬화란 무엇입니까? (예시분석)

乌拉乌拉~
乌拉乌拉~원래의
2018-08-23 13:38:222806검색

다음 글에서는 파이썬의 직렬화가 무엇인지 알아보겠습니다. python 직렬화에 대해 알아보고 Python 프로그래밍에서 Python 직렬화가 어떤 역할을 할 수 있는지 알아보세요.

프로그램이 실행되는 동안 모든 변수는 메모리에 있습니다. 예를 들어 다음과 같이 딕셔너리를 정의합니다.

d = dict(name='Bob', age=20, score=88)

이름을 'Bill'로 변경하는 등 언제든지 변수를 수정할 수 있지만 프로그램이 끝나면 변수 점유 운영 체제에서 모든 메모리를 회수합니다. 수정된 'Bill'이 디스크에 저장되지 않은 경우, 다음에 프로그램을 다시 실행하면 변수는 다시 'Bob'으로 초기화됩니다.

변수를 메모리에서 저장 가능 또는 전송 가능으로 변경하는 과정을 파이썬에서는 피클링(pickling)이라고 합니다. 다른 언어에서는 모두 같은 의미입니다.

직렬화 후 직렬화된 콘텐츠를 디스크에 기록하거나 네트워크를 통해 다른 시스템으로 전송할 수 있습니다.

역시 직렬화된 객체에서 변수 내용을 메모리로 다시 읽는 것을 역직렬화, 즉 역피클링이라고 합니다.

Python은 직렬화를 구현하기 위한 피클 모듈을 제공합니다.

먼저 객체를 직렬화하여 파일에 쓰려고 합니다.

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'

pickle.dumps() 메서드는 모든 객체를 바이트로 직렬화한 다음 해당 바이트를 파일에 씁니다. 또는 다른 방법인 pickle.dump()를 사용하여 객체를 직접 직렬화하고 파일과 같은 객체에 씁니다:

>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()

작성된 dump.txt 파일을 보세요. 지저분한 내용이 잔뜩 있습니다. 이것들은 모두 Python Inside에 의해 저장된 객체입니다. 정보.

객체를 디스크에서 메모리로 읽으려면 먼저 내용을 바이트로 읽은 다음 pickle.loads() 메서드를 사용하여 객체를 역직렬화하거나 pickle.load() 메서드를 직접 사용할 수 있습니다. 파일에서 읽으려면 -like Object에서 객체를 직접 역직렬화하세요. 방금 저장한 개체를 역직렬화하기 위해 또 다른 Python 명령줄을 엽니다.

>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}

변수의 내용이 다시 돌아왔습니다!

물론, 이 변수와 원래 변수는 전혀 관련이 없는 개체이며 내용이 동일할 뿐입니다.

Pickle의 문제점은 다른 모든 프로그래밍 언어에 고유한 직렬화 문제와 동일합니다. 즉, Python에서만 사용할 수 있으며, 서로 다른 버전의 Python은 서로 호환되지 않을 수 있으므로 중요하지 않은 데이터만 가능합니다. 성공적으로 역직렬화되더라도 상관없습니다.

위 내용은 이 글에 설명된 모든 내용입니다. 이 글은 주로 파이썬 직렬화 관련 지식을 소개하는 내용입니다. 위 내용을 이해하는 데 참고하시기 바랍니다. 이 글에서 제가 설명한 내용이 여러분에게 도움이 되고 파이썬을 더 쉽게 배울 수 있기를 바랍니다.

더 많은 관련 지식을 알고 싶으시면 PHP 중국어 홈페이지의 Python tutorial 칼럼을 방문해 주세요.

위 내용은 파이썬에서 직렬화란 무엇입니까? (예시분석)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.