diff --git a/test/DebugProtoTest.thrift b/test/DebugProtoTest.thrift
index 50ae4c1..e7119c4 100644
--- a/test/DebugProtoTest.thrift
+++ b/test/DebugProtoTest.thrift
@@ -72,11 +72,15 @@
 }
 
 struct Empty {
-}
+} (
+  python.immutable = "",
+)
 
 struct Wrapper {
   1: Empty foo
-}
+} (
+  python.immutable = "",
+)
 
 struct RandomStuff {
   1: i32 a,
@@ -153,9 +157,9 @@
   42: map<byte, binary>           byte_binary_map;
   43: map<byte, bool>             byte_boolean_map;
   // collections as keys
-  44: map<list<byte>, byte>       list_byte_map;
-  45: map<set<byte>, byte>        set_byte_map;
-  46: map<map<byte,byte>, byte>   map_byte_map;
+  44: map<list<byte> (python.immutable = ""), byte>       list_byte_map;
+  45: map<set<byte> (python.immutable = ""), byte>        set_byte_map;
+  46: map<map<byte,byte> (python.immutable = ""), byte>   map_byte_map;
   // collections as values
   47: map<byte, map<byte,byte>>   byte_map_map;
   48: map<byte, set<byte>>        byte_set_map;
diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index 414f9a54..a58ed97 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -105,12 +105,13 @@
 {
   1: map<Numberz, UserId> userMap,
   2: list<Xtruct> xtructs
-}
+} (python.immutable= "")
 
 struct CrazyNesting {
   1: string string_field,
   2: optional set<Insanity> set_field,
-  3: required list< map<set<i32>,map<i32,set<list<map<Insanity,string>>>>>> list_field,
+  3: required list<map<set<i32> (python.immutable = ""),
+                       map<i32,set<list<map<Insanity,string>(python.immutable = "")> (python.immutable = "")>>>> list_field,
   4: binary binary_field
 }
 
diff --git a/test/py/RunClientServer.py b/test/py/RunClientServer.py
index fa2a264..f084a41 100755
--- a/test/py/RunClientServer.py
+++ b/test/py/RunClientServer.py
@@ -37,6 +37,7 @@
 DEFAULT_LIBDIR_PY3 = os.path.join(ROOT_DIR, 'lib', 'py', 'build', 'lib')
 
 SCRIPTS = [
+  'TestFrozen.py',
   'TSimpleJSONProtocolTest.py',
   'SerializationTest.py',
   'TestEof.py',
diff --git a/test/py/TestFrozen.py b/test/py/TestFrozen.py
new file mode 100755
index 0000000..76750ad
--- /dev/null
+++ b/test/py/TestFrozen.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from DebugProtoTest.ttypes import CompactProtoTestStruct, Empty, Wrapper
+from thrift.Thrift import TFrozenDict
+from thrift.transport import TTransport
+from thrift.protocol import TBinaryProtocol
+import collections
+import unittest
+
+
+class TestFrozenBase(unittest.TestCase):
+  def _roundtrip(self, src, dst):
+    otrans = TTransport.TMemoryBuffer()
+    optoro = self.protocol(otrans)
+    src.write(optoro)
+    itrans = TTransport.TMemoryBuffer(otrans.getvalue())
+    iproto = self.protocol(itrans)
+    return dst.read(iproto) or dst
+
+  def test_dict_is_hashable_only_after_frozen(self):
+    d0 = {}
+    self.assertFalse(isinstance(d0, collections.Hashable))
+    d1 = TFrozenDict(d0)
+    self.assertTrue(isinstance(d1, collections.Hashable))
+
+  def test_struct_with_collection_fields(self):
+    pass
+
+  def test_set(self):
+    """Test that annotated set field can be serialized and deserialized"""
+    x = CompactProtoTestStruct(set_byte_map={
+      frozenset([42, 100, -100]): 99,
+      frozenset([0]): 100,
+      frozenset([]): 0,
+    })
+    x2 = self._roundtrip(x, CompactProtoTestStruct())
+    self.assertEqual(x2.set_byte_map[frozenset([42, 100, -100])], 99)
+    self.assertEqual(x2.set_byte_map[frozenset([0])], 100)
+    self.assertEqual(x2.set_byte_map[frozenset([])], 0)
+
+  def test_map(self):
+    """Test that annotated map field can be serialized and deserialized"""
+    x = CompactProtoTestStruct(map_byte_map={
+      TFrozenDict({42: 42, 100: -100}): 99,
+      TFrozenDict({0: 0}): 100,
+      TFrozenDict({}): 0,
+    })
+    x2 = self._roundtrip(x, CompactProtoTestStruct())
+    self.assertEqual(x2.map_byte_map[TFrozenDict({42: 42, 100: -100})], 99)
+    self.assertEqual(x2.map_byte_map[TFrozenDict({0: 0})], 100)
+    self.assertEqual(x2.map_byte_map[TFrozenDict({})], 0)
+
+  def test_list(self):
+    """Test that annotated list field can be serialized and deserialized"""
+    x = CompactProtoTestStruct(list_byte_map={
+      (42, 100, -100): 99,
+      (0,): 100,
+      (): 0,
+    })
+    x2 = self._roundtrip(x, CompactProtoTestStruct())
+    self.assertEqual(x2.list_byte_map[(42, 100, -100)], 99)
+    self.assertEqual(x2.list_byte_map[(0,)], 100)
+    self.assertEqual(x2.list_byte_map[()], 0)
+
+  def test_empty_struct(self):
+    """Test that annotated empty struct can be serialized and deserialized"""
+    x = CompactProtoTestStruct(empty_struct_field=Empty())
+    x2 = self._roundtrip(x, CompactProtoTestStruct())
+    self.assertEqual(x2.empty_struct_field, Empty())
+
+  def test_struct(self):
+    """Test that annotated struct can be serialized and deserialized"""
+    x = Wrapper(foo=Empty())
+    self.assertEqual(x.foo, Empty())
+    x2 = self._roundtrip(x, Wrapper)
+    self.assertEqual(x2.foo, Empty())
+
+
+class TestFrozen(TestFrozenBase):
+  def protocol(self, trans):
+    return TBinaryProtocol.TBinaryProtocolFactory().getProtocol(trans)
+
+
+class TestFrozenAccelerated(TestFrozenBase):
+  def protocol(self, trans):
+    return TBinaryProtocol.TBinaryProtocolAcceleratedFactory().getProtocol(trans)
+
+
+def suite():
+  suite = unittest.TestSuite()
+  loader = unittest.TestLoader()
+  suite.addTest(loader.loadTestsFromTestCase(TestFrozen))
+  suite.addTest(loader.loadTestsFromTestCase(TestFrozenAccelerated))
+  return suite
+
+if __name__ == "__main__":
+  unittest.main(defaultTest="suite", testRunner=unittest.TextTestRunner(verbosity=2))
