Python module for freezing objects
Project description
object-freezer
Python module for freezing objects.
Installation
$ pip install object-freezer
Then import this module as:
import object_freezer as of
Examples
A list is frozen into a tuple:
>>> l = [1, 2, 3]
>>> hash(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> fl = of.freeze(l)
>>> hash(fl)
2528502973977326415
>>> fl
(1, 2, 3)
A dictionary is frozen into a deepfrozendict
instance:
>>> import object_freezer as of
>>> d = {'a': 'A', 'b': 'B'}
>>> hash(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> fd = of.freeze(d)
>>> hash(fd)
3871628092596788623
>>> fd
<deepfrozendict {'a': 'A', 'b': 'B'}>
If an element of a list is not hashable, it will also be frozen:
>>> l = [[1, 2], {3: 4}]
>>> hash(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> fl = of.freeze(l)
>>> hash(fl)
5879964472677921951
>>> fl
((1, 2), <deepfrozendict {3: 4}>)
If a value of a dictionary is not hashable, it will be frozen:
>>> import object_freezer as of
>>> d = {'a': ['A', 0], 'b': {'B': 1}}
>>> hash(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> fd = of.freeze(d)
>>> hash(fd)
6230706721132225338
>>> fd
<deepfrozendict {'a': ('A', 0), 'b': <deepfrozendict {'B': 1}>}>
Known issues & notes
A dict
with one (key, value)
pair has the same hash value as a tuple (key, value)
Since a list is frozen into a tuple, it is obvious that of.freeze([key, value])
and of.freeze((key, value))
are the same and thus have the same hash value. However, of.freeze({key: value})
also always has the same hash value.
>>> d = {1: 2}
>>> t = (1, 2)
>>> fd = of.freeze(d)
>>> ft = of.freeze(t)
>>> hash(fd) == hash(ft)
True
It is not a major issue since fd == ft
returns False
. Therefore, for example, you can use fd
and ft
as a distinct dictionary keys.
>>> fd == ft
False
>>> {fd: 0, ft: 1}
{<deepfrozendict {1: 2}>: 0, (1, 2): 1}
License
TO-DO's
- Test against various Python versions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file object-freezer-0.1.2.tar.gz
.
File metadata
- Download URL: object-freezer-0.1.2.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e15afab7577a795a98f201b15531e74aad6dcd51935bcc251db68281cd7dd76c |
|
MD5 | cfd89da9837765133ab7cb3fb8a6fc6c |
|
BLAKE2b-256 | b58fefbb074e664a0e05d4b298bf3125667ff163b3655e6ce0089441bc2e5bb6 |
File details
Details for the file object_freezer-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: object_freezer-0.1.2-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c7aa9dace338fa48f11f97a24339f2f55a862d29e6906c64a99ad845bc33a9c |
|
MD5 | fdbee5f10dc653d27f45ad33adb29f52 |
|
BLAKE2b-256 | 31814be60258baf3929910347c566bac57cdf85060752e20c9d88bc3f4632958 |