List of built-in types converted to heap types

Ref. bpo-43908: here’s a list of stdlib types that have been converted from static types (allocated on the stack) to heap allocated types.

Commits are listed chronologically.

UPDATE: I’ve added a checkboxes for the immutable and disallow instantiation flags, and for types with proper GC support. Ref. msg391905 in bpo-43916 and msg393547 in bpo-42972.

Please edit this post if anything is missing!

Commands used to compile this list
# Find commits:
$ git log --oneline -G"^static\s+PyType_Spec" --format=%h > commit.list
# Manually filter out some uninteresting commits (test modules, xx modules, ...)
# Generate markdown list (quick and dirty, could have been more compact):
$ for REF in $(cat commit.list); do \
     git log -n 1 --format="- [%h](https://github.com/python/cpython/commit/%H) %cs " $REF | tr -d "\n" && \
     git diff-tree --no-commit-id --name-only -r $REF | grep "\.c" | grep -v clinic && \
     git log -n 1 -p $REF | gsed -n "s/^+static[ ]\+PyType_Spec[ ]\+\([a-zA-Z_0-9]\+\).*/    - [ ] \`\1\`/p" && \
     echo ""; \
  done > list.md
# Manually filter some of the file references (particularly sqlite3 stuff)
# C&P to Discourse
Raw list of commit refs
0b858cdd5d
c8a87addb1
75bf107c62
dd39123970
6104013838
6a02b38475
a6109ef68d
5c36da78d7
01c6aa43dc
74b4eda98b
c8c4200b65
256e54acdb
9031bd4fa4
cb6db8b6ae
a937ab45d6
83de110dce
52a2df135c
2aabc3200b
63f102fe07
31967fd8d0
e087f7cd43
1937edd376
ec68918795
c4862e333a
bf69a8f99f
d5b3f6b7f9
53e4c91725
33f15a16d4
b3966639d2
df69e75edc
f919054e53
04f0bbfbed
ac46eb4ad6
a1ffad0719
4f384af067
11dc6c311d
3b36fb1f53
bc07cb883e
Types converted in Python 3.10
  • 0b858cdd5d 2021-01-04 Modules/cjkcodecs/multibytecodec.c

    • _multibytecodec.MultibyteCodec
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _multibytecodec.MultibyteIncrementalEncoder
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _multibytecodec.MultibyteIncrementalDecoder
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _multibytecodec.MultibyteStreamReader
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _multibytecodec.MultibyteStreamWriter
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • c8a87addb1 2021-01-04 Modules/pyexpat.c

    • pyexpat.xmlparser
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 75bf107c62 2021-01-02 Modules/arraymodule.c

    • array.array
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • array.arrayiterator
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • dd39123970 2020-12-29 Modules/_functoolsmodule.c

    • functools.partial
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • functools.KeyWrapper
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • functools._lru_list_elem
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • functools._lru_cache_wrapper
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 6104013838 2020-12-18 Modules/_threadmodule.c

    • _thread.lock
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _thread.RLock
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _thread._localdummy
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _thread._local
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 6a02b38475 2020-12-15 Modules/_csv.c

    • _csv.Dialect
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _csv.reader
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _csv.writer
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • a6109ef68d 2020-11-20 Modules/_sre.c

    • re.Pattern
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • re.Match
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _sre.SRE_Scanner
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 5c36da78d7 2020-11-20 Modules/_ssl.c

    • _ssl._SSLSocket
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _ssl._SSLContext
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _ssl.MemoryBIO
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _ssl.SSLSession
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 01c6aa43dc 2020-11-07 Modules/_queuemodule.c

    • _queue.SimpleQueue
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 74b4eda98b 2020-11-03 Modules/mmapmodule.c

    • mmap.mmap
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • c8c4200b65 2020-10-26 Modules/unicodedata.c

    • unicodedata.UCD
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 256e54acdb 2020-10-01 Modules/_sqlite

    • sqlite3.Connection
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • sqlite3.Cursor
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 9031bd4fa4 2020-10-01 Modules/_sqlite

    • sqlite3.Row
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • sqlite3.Statement
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • cb6db8b6ae 2020-09-29 Modules/_sqlite

    • sqlite3.PrepareProtocol
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 83de110dce 2020-09-23 Modules/_lsprof.c

    • _lsprof.Profiler
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 52a2df135c 2020-09-08 Modules/sha256module.c

    • _sha256.sha224
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _sha256.sha256
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 2aabc3200b 2020-09-07 Modules/overlapped.c

    • _overlapped.Overlapped
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 63f102fe07 2020-09-06 Modules/md5module.c Modules/sha1module.c Modules/sha512module.c

    • _md5.md5
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _sha1.sha1
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _sha512.sha384
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _sha512.sha512
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 31967fd8d0 2020-08-27 Modules/_operator.c

    • operator.itemgetter
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • operator.attrgetter
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • operator.methodcaller
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • e087f7cd43 2020-08-13 Modules/_winapi.c

    • winapi__overlapped.Overlapped
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 1937edd376 2020-06-23 Modules/_lzmamodule.c

    • _lzma.LZMACompressor
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _lzma.LZMADecompressor
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • ec68918795 2020-06-20 Modules/_bz2module.c

    • _bz2.BZ2Compressor
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _bz2.BZ2Decompressor
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • c4862e333a 2020-06-17 Modules/_gdbmmodule.c

    • _gdbm.gdbm
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • bf69a8f99f 2020-06-16 Modules/_dbmmodule.c

    • _dbm.dbm
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
Types converted in Python 3.9
  • d5b3f6b7f9 2020-05-16 Modules/_hashopenssl.c

    • _hashlib.HASHXOF
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 53e4c91725 2020-03-30 Modules/_abc.c

    • _abc._abc_data
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 33f15a16d4 2020-03-27 Modules/_json.c

    • _json.Scanner
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _json.Encoder
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • b3966639d2 2019-11-05 Modules/posixmodule.c

    • posix.DirEntry
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • posix.ScandirIterator
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • df69e75edc 2019-09-25 Modules/_hashopenssl.c

    • _hashlib.HASH
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • f919054e53 2019-09-14 Modules/selectmodule.c

    • select.devpoll
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • select.kevent
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • select.poll
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • select.epoll
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • select.kqueue
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 04f0bbfbed 2019-09-13 Modules/_randommodule.c

    • _random.Random
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • ac46eb4ad6 2019-09-11 Python/Python-ast.c (Parser/asdl_c.py)

    • ast.AST
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • a1ffad0719 2019-09-10 Modules/zlibmodule.c

    • zlib.Compress
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • zlib.Decompress
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • 4f384af067 2019-09-10 Modules/_struct.c

    • _struct.unpack_iterator
      • need Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _struct.Struct
      • need Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
Types converted pre Python 3.9

Python 3.4

  • 11dc6c311d 2012-10-14 Modules/_tkinter.c
    • _tkinter.Tcl_Obj
      • need Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _tkinter.tktimertoken
      • need Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
    • _tkinter.tkapp
      • need Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support

Python 3.1 (?)

  • 3b36fb1f53 2012-06-22 Modules/_ssl.c

    • ssl.SSLError
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
  • bc07cb883e 2012-06-14 Modules/_curses_panel.c

    • _curses_panel.panel
      • Py_TPFLAGS_DISALLOW_INSTANTIATION
      • Py_TPFLAGS_IMMUTABLETYPE
      • Full GC support
2 Likes

FYI, I’ve traced the PyType_Spec variable names to complete type names. Should be more readable now.

Cc. @vstinner