51 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Pickling in Python
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- ### TODO: More on pickle functions (like `pickle.dumps`). -->
							 | 
						||
| 
								 | 
							
								## Overview
							 | 
						||
| 
								 | 
							
								Pickling refers to the serialization and deserialization of an object in Python. It essentially stores an object to a file so the user can load it later on. During pickling, the Python object is converted to a binary stream.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Usage Example
							 | 
						||
| 
								 | 
							
								First let's create a class:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```python
							 | 
						||
| 
								 | 
							
								class ExampleClass():
							 | 
						||
| 
								 | 
							
								  def __init__(self, integer, string, number_list):
							 | 
						||
| 
								 | 
							
								    self.integer = integer
							 | 
						||
| 
								 | 
							
								    self.string = string
							 | 
						||
| 
								 | 
							
								    self.number_list = number_list
							 | 
						||
| 
								 | 
							
								  def print_attributes(self):
							 | 
						||
| 
								 | 
							
								    print(self.integer, self.string, self.number_list)
							 | 
						||
| 
								 | 
							
								  def print_sum(self):
							 | 
						||
| 
								 | 
							
								    print(sum(self.number_list))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								instance = ExampleClass(10, 'rubberducky', [1, 2, 3, 1, 2])
							 | 
						||
| 
								 | 
							
								instance.print_attributes() # Prints 10 rubberducky [1, 2, 3, 1, 2]
							 | 
						||
| 
								 | 
							
								instance.print_sum() # Prints 9
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								Now, let's try pickling it:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```python
							 | 
						||
| 
								 | 
							
								import pickle
							 | 
						||
| 
								 | 
							
								with open('file.pickle', 'wb') as file:
							 | 
						||
| 
								 | 
							
								  pickle.dump(instance, file)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This creates the file `file.pickle`. According to [this StackOverflow thread](https://stackoverflow.com/questions/40433474/preferred-or-most-common-file-extension-for-pickle-files), Python 3's preferred extension is `.pickle`. Now we simply need to lead it:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```python
							 | 
						||
| 
								 | 
							
								import pickle
							 | 
						||
| 
								 | 
							
								with open('file.pickle', 'rb') as file:
							 | 
						||
| 
								 | 
							
								  loaded = pickle.load(file)
							 | 
						||
| 
								 | 
							
								  loaded.print_attributes() # Prints 10 rubberducky [1, 2, 3, 1, 2]
							 | 
						||
| 
								 | 
							
								  loaded.print_sum() # Prints 9
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It works! Note that both times, `open()`'s mode was `rb` or `wb`, as opposed to the regular `r` or `w` (which stand for read and write). This is because of how pickle works: it uses binary.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### More Information
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[Python - Pickling](https://docs.python.org/3/library/pickle.html)
							 |