allocation.html 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
  6. <meta property="og:title" content="Allocating Objects on the Heap" />
  7. <meta property="og:type" content="website" />
  8. <meta property="og:url" content="https://docs.python.org/3/c-api/allocation.html" />
  9. <meta property="og:site_name" content="Python documentation" />
  10. <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
  11. <meta property="og:image:alt" content="Python documentation" />
  12. <meta property="og:image:width" content="200" />
  13. <meta property="og:image:height" content="200" />
  14. <meta name="theme-color" content="#3776ab" />
  15. <title>Allocating Objects on the Heap &#8212; Python 3.12.0 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
  16. <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
  17. <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?digest=b37c26da2f7529d09fe70b41c4b2133fe4931a90" />
  18. <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css" />
  19. <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
  20. <script src="../_static/jquery.js"></script>
  21. <script src="../_static/underscore.js"></script>
  22. <script src="../_static/doctools.js"></script>
  23. <script src="../_static/sidebar.js"></script>
  24. <link rel="search" type="application/opensearchdescription+xml"
  25. title="Search within Python 3.12.0 documentation"
  26. href="../_static/opensearch.xml"/>
  27. <link rel="author" title="About these documents" href="../about.html" />
  28. <link rel="index" title="Index" href="../genindex.html" />
  29. <link rel="search" title="Search" href="../search.html" />
  30. <link rel="copyright" title="Copyright" href="../copyright.html" />
  31. <link rel="next" title="Common Object Structures" href="structures.html" />
  32. <link rel="prev" title="Object Implementation Support" href="objimpl.html" />
  33. <link rel="canonical" href="https://docs.python.org/3/c-api/allocation.html" />
  34. <style>
  35. @media only screen {
  36. table.full-width-table {
  37. width: 100%;
  38. }
  39. }
  40. </style>
  41. <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
  42. <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
  43. <script type="text/javascript" src="../_static/copybutton.js"></script>
  44. <script type="text/javascript" src="../_static/menu.js"></script>
  45. <script type="text/javascript" src="../_static/themetoggle.js"></script>
  46. </head>
  47. <body>
  48. <div class="mobile-nav">
  49. <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
  50. aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
  51. <nav class="nav-content" role="navigation">
  52. <label for="menuToggler" class="toggler__label">
  53. <span></span>
  54. </label>
  55. <span class="nav-items-wrapper">
  56. <a href="https://www.python.org/" class="nav-logo">
  57. <img src="../_static/py.svg" alt="Logo"/>
  58. </a>
  59. <span class="version_switcher_placeholder"></span>
  60. <form role="search" class="search" action="../search.html" method="get">
  61. <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
  62. <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
  63. </svg>
  64. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  65. <input type="submit" value="Go"/>
  66. </form>
  67. </span>
  68. </nav>
  69. <div class="menu-wrapper">
  70. <nav class="menu" role="navigation" aria-label="main navigation">
  71. <div class="language_switcher_placeholder"></div>
  72. <label class="theme-selector-label">
  73. Theme
  74. <select class="theme-selector" oninput="activateTheme(this.value)">
  75. <option value="auto" selected>Auto</option>
  76. <option value="light">Light</option>
  77. <option value="dark">Dark</option>
  78. </select>
  79. </label>
  80. <div>
  81. <h4>Previous topic</h4>
  82. <p class="topless"><a href="objimpl.html"
  83. title="previous chapter">Object Implementation Support</a></p>
  84. </div>
  85. <div>
  86. <h4>Next topic</h4>
  87. <p class="topless"><a href="structures.html"
  88. title="next chapter">Common Object Structures</a></p>
  89. </div>
  90. <div role="note" aria-label="source link">
  91. <h3>This Page</h3>
  92. <ul class="this-page-menu">
  93. <li><a href="../bugs.html">Report a Bug</a></li>
  94. <li>
  95. <a href="https://github.com/python/cpython/blob/main/Doc/c-api/allocation.rst"
  96. rel="nofollow">Show Source
  97. </a>
  98. </li>
  99. </ul>
  100. </div>
  101. </nav>
  102. </div>
  103. </div>
  104. <div class="related" role="navigation" aria-label="related navigation">
  105. <h3>Navigation</h3>
  106. <ul>
  107. <li class="right" style="margin-right: 10px">
  108. <a href="../genindex.html" title="General Index"
  109. accesskey="I">index</a></li>
  110. <li class="right" >
  111. <a href="../py-modindex.html" title="Python Module Index"
  112. >modules</a> |</li>
  113. <li class="right" >
  114. <a href="structures.html" title="Common Object Structures"
  115. accesskey="N">next</a> |</li>
  116. <li class="right" >
  117. <a href="objimpl.html" title="Object Implementation Support"
  118. accesskey="P">previous</a> |</li>
  119. <li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  120. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  121. <li class="switchers">
  122. <div class="language_switcher_placeholder"></div>
  123. <div class="version_switcher_placeholder"></div>
  124. </li>
  125. <li>
  126. </li>
  127. <li id="cpython-language-and-version">
  128. <a href="../index.html">3.12.0 Documentation</a> &#187;
  129. </li>
  130. <li class="nav-item nav-item-1"><a href="index.html" >Python/C API Reference Manual</a> &#187;</li>
  131. <li class="nav-item nav-item-2"><a href="objimpl.html" accesskey="U">Object Implementation Support</a> &#187;</li>
  132. <li class="nav-item nav-item-this"><a href="">Allocating Objects on the Heap</a></li>
  133. <li class="right">
  134. <div class="inline-search" role="search">
  135. <form class="inline-search" action="../search.html" method="get">
  136. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  137. <input type="submit" value="Go" />
  138. </form>
  139. </div>
  140. |
  141. </li>
  142. <li class="right">
  143. <label class="theme-selector-label">
  144. Theme
  145. <select class="theme-selector" oninput="activateTheme(this.value)">
  146. <option value="auto" selected>Auto</option>
  147. <option value="light">Light</option>
  148. <option value="dark">Dark</option>
  149. </select>
  150. </label> |</li>
  151. </ul>
  152. </div>
  153. <div class="document">
  154. <div class="documentwrapper">
  155. <div class="bodywrapper">
  156. <div class="body" role="main">
  157. <section id="allocating-objects-on-the-heap">
  158. <span id="allocating-objects"></span><h1>Allocating Objects on the Heap<a class="headerlink" href="#allocating-objects-on-the-heap" title="Permalink to this headline">¶</a></h1>
  159. <dl class="c function">
  160. <dt class="sig sig-object c" id="c._PyObject_New">
  161. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">_PyObject_New</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="type.html#c.PyTypeObject" title="PyTypeObject"><span class="n"><span class="pre">PyTypeObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">type</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c._PyObject_New" title="Permalink to this definition">¶</a><br /></dt>
  162. <dd><em class="refcount">Return value: New reference.</em></dd></dl>
  163. <dl class="c function">
  164. <dt class="sig sig-object c" id="c._PyObject_NewVar">
  165. <a class="reference internal" href="structures.html#c.PyVarObject" title="PyVarObject"><span class="n"><span class="pre">PyVarObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">_PyObject_NewVar</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="type.html#c.PyTypeObject" title="PyTypeObject"><span class="n"><span class="pre">PyTypeObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">type</span></span>, <a class="reference internal" href="intro.html#c.Py_ssize_t" title="Py_ssize_t"><span class="n"><span class="pre">Py_ssize_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">size</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c._PyObject_NewVar" title="Permalink to this definition">¶</a><br /></dt>
  166. <dd><em class="refcount">Return value: New reference.</em></dd></dl>
  167. <dl class="c function">
  168. <dt class="sig sig-object c" id="c.PyObject_Init">
  169. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyObject_Init</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span>, <a class="reference internal" href="type.html#c.PyTypeObject" title="PyTypeObject"><span class="n"><span class="pre">PyTypeObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">type</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_Init" title="Permalink to this definition">¶</a><br /></dt>
  170. <dd><em class="refcount">Return value: Borrowed reference.</em><em class="stableabi"> Part of the <a class="reference internal" href="stable.html#stable"><span class="std std-ref">Stable ABI</span></a>.</em><p>Initialize a newly allocated object <em>op</em> with its type and initial
  171. reference. Returns the initialized object. If <em>type</em> indicates that the
  172. object participates in the cyclic garbage detector, it is added to the
  173. detector’s set of observed objects. Other fields of the object are not
  174. affected.</p>
  175. </dd></dl>
  176. <dl class="c function">
  177. <dt class="sig sig-object c" id="c.PyObject_InitVar">
  178. <a class="reference internal" href="structures.html#c.PyVarObject" title="PyVarObject"><span class="n"><span class="pre">PyVarObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyObject_InitVar</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyVarObject" title="PyVarObject"><span class="n"><span class="pre">PyVarObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span>, <a class="reference internal" href="type.html#c.PyTypeObject" title="PyTypeObject"><span class="n"><span class="pre">PyTypeObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">type</span></span>, <a class="reference internal" href="intro.html#c.Py_ssize_t" title="Py_ssize_t"><span class="n"><span class="pre">Py_ssize_t</span></span></a><span class="w"> </span><span class="n"><span class="pre">size</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_InitVar" title="Permalink to this definition">¶</a><br /></dt>
  179. <dd><em class="refcount">Return value: Borrowed reference.</em><em class="stableabi"> Part of the <a class="reference internal" href="stable.html#stable"><span class="std std-ref">Stable ABI</span></a>.</em><p>This does everything <a class="reference internal" href="#c.PyObject_Init" title="PyObject_Init"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyObject_Init()</span></code></a> does, and also initializes the
  180. length information for a variable-size object.</p>
  181. </dd></dl>
  182. <dl class="c macro">
  183. <dt class="sig sig-object c" id="c.PyObject_New">
  184. <span class="sig-name descname"><span class="n"><span class="pre">PyObject_New</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">TYPE</span></span>, <span class="n"><span class="pre">typeobj</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_New" title="Permalink to this definition">¶</a><br /></dt>
  185. <dd><p>Allocate a new Python object using the C structure type <em>TYPE</em>
  186. and the Python type object <em>typeobj</em> (<code class="docutils literal notranslate"><span class="pre">PyTypeObject*</span></code>).
  187. Fields not defined by the Python object header are not initialized.
  188. The caller will own the only reference to the object
  189. (i.e. its reference count will be one).
  190. The size of the memory allocation is determined from the
  191. <a class="reference internal" href="typeobj.html#c.PyTypeObject.tp_basicsize" title="PyTypeObject.tp_basicsize"><code class="xref c c-member docutils literal notranslate"><span class="pre">tp_basicsize</span></code></a> field of the type object.</p>
  192. </dd></dl>
  193. <dl class="c macro">
  194. <dt class="sig sig-object c" id="c.PyObject_NewVar">
  195. <span class="sig-name descname"><span class="n"><span class="pre">PyObject_NewVar</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">TYPE</span></span>, <span class="n"><span class="pre">typeobj</span></span>, <span class="n"><span class="pre">size</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_NewVar" title="Permalink to this definition">¶</a><br /></dt>
  196. <dd><p>Allocate a new Python object using the C structure type <em>TYPE</em> and the
  197. Python type object <em>typeobj</em> (<code class="docutils literal notranslate"><span class="pre">PyTypeObject*</span></code>).
  198. Fields not defined by the Python object header
  199. are not initialized. The allocated memory allows for the <em>TYPE</em> structure
  200. plus <em>size</em> (<code class="docutils literal notranslate"><span class="pre">Py_ssize_t</span></code>) fields of the size
  201. given by the <a class="reference internal" href="typeobj.html#c.PyTypeObject.tp_itemsize" title="PyTypeObject.tp_itemsize"><code class="xref c c-member docutils literal notranslate"><span class="pre">tp_itemsize</span></code></a> field of
  202. <em>typeobj</em>. This is useful for implementing objects like tuples, which are
  203. able to determine their size at construction time. Embedding the array of
  204. fields into the same allocation decreases the number of allocations,
  205. improving the memory management efficiency.</p>
  206. </dd></dl>
  207. <dl class="c function">
  208. <dt class="sig sig-object c" id="c.PyObject_Del">
  209. <span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyObject_Del</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_Del" title="Permalink to this definition">¶</a><br /></dt>
  210. <dd><p>Releases memory allocated to an object using <a class="reference internal" href="#c.PyObject_New" title="PyObject_New"><code class="xref c c-macro docutils literal notranslate"><span class="pre">PyObject_New</span></code></a> or
  211. <a class="reference internal" href="#c.PyObject_NewVar" title="PyObject_NewVar"><code class="xref c c-macro docutils literal notranslate"><span class="pre">PyObject_NewVar</span></code></a>. This is normally called from the
  212. <a class="reference internal" href="typeobj.html#c.PyTypeObject.tp_dealloc" title="PyTypeObject.tp_dealloc"><code class="xref c c-member docutils literal notranslate"><span class="pre">tp_dealloc</span></code></a> handler specified in the object’s type. The fields of
  213. the object should not be accessed after this call as the memory is no
  214. longer a valid Python object.</p>
  215. </dd></dl>
  216. <dl class="c var">
  217. <dt class="sig sig-object c" id="c._Py_NoneStruct">
  218. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_Py_NoneStruct</span></span></span><a class="headerlink" href="#c._Py_NoneStruct" title="Permalink to this definition">¶</a><br /></dt>
  219. <dd><p>Object which is visible in Python as <code class="docutils literal notranslate"><span class="pre">None</span></code>. This should only be accessed
  220. using the <a class="reference internal" href="none.html#c.Py_None" title="Py_None"><code class="xref c c-macro docutils literal notranslate"><span class="pre">Py_None</span></code></a> macro, which evaluates to a pointer to this
  221. object.</p>
  222. </dd></dl>
  223. <div class="admonition seealso">
  224. <p class="admonition-title">See also</p>
  225. <dl class="simple">
  226. <dt><a class="reference internal" href="module.html#c.PyModule_Create" title="PyModule_Create"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyModule_Create()</span></code></a></dt><dd><p>To allocate and create extension modules.</p>
  227. </dd>
  228. </dl>
  229. </div>
  230. </section>
  231. <div class="clearer"></div>
  232. </div>
  233. </div>
  234. </div>
  235. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  236. <div class="sphinxsidebarwrapper">
  237. <div>
  238. <h4>Previous topic</h4>
  239. <p class="topless"><a href="objimpl.html"
  240. title="previous chapter">Object Implementation Support</a></p>
  241. </div>
  242. <div>
  243. <h4>Next topic</h4>
  244. <p class="topless"><a href="structures.html"
  245. title="next chapter">Common Object Structures</a></p>
  246. </div>
  247. <div role="note" aria-label="source link">
  248. <h3>This Page</h3>
  249. <ul class="this-page-menu">
  250. <li><a href="../bugs.html">Report a Bug</a></li>
  251. <li>
  252. <a href="https://github.com/python/cpython/blob/main/Doc/c-api/allocation.rst"
  253. rel="nofollow">Show Source
  254. </a>
  255. </li>
  256. </ul>
  257. </div>
  258. </div>
  259. </div>
  260. <div class="clearer"></div>
  261. </div>
  262. <div class="related" role="navigation" aria-label="related navigation">
  263. <h3>Navigation</h3>
  264. <ul>
  265. <li class="right" style="margin-right: 10px">
  266. <a href="../genindex.html" title="General Index"
  267. >index</a></li>
  268. <li class="right" >
  269. <a href="../py-modindex.html" title="Python Module Index"
  270. >modules</a> |</li>
  271. <li class="right" >
  272. <a href="structures.html" title="Common Object Structures"
  273. >next</a> |</li>
  274. <li class="right" >
  275. <a href="objimpl.html" title="Object Implementation Support"
  276. >previous</a> |</li>
  277. <li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  278. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  279. <li class="switchers">
  280. <div class="language_switcher_placeholder"></div>
  281. <div class="version_switcher_placeholder"></div>
  282. </li>
  283. <li>
  284. </li>
  285. <li id="cpython-language-and-version">
  286. <a href="../index.html">3.12.0 Documentation</a> &#187;
  287. </li>
  288. <li class="nav-item nav-item-1"><a href="index.html" >Python/C API Reference Manual</a> &#187;</li>
  289. <li class="nav-item nav-item-2"><a href="objimpl.html" >Object Implementation Support</a> &#187;</li>
  290. <li class="nav-item nav-item-this"><a href="">Allocating Objects on the Heap</a></li>
  291. <li class="right">
  292. <div class="inline-search" role="search">
  293. <form class="inline-search" action="../search.html" method="get">
  294. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  295. <input type="submit" value="Go" />
  296. </form>
  297. </div>
  298. |
  299. </li>
  300. <li class="right">
  301. <label class="theme-selector-label">
  302. Theme
  303. <select class="theme-selector" oninput="activateTheme(this.value)">
  304. <option value="auto" selected>Auto</option>
  305. <option value="light">Light</option>
  306. <option value="dark">Dark</option>
  307. </select>
  308. </label> |</li>
  309. </ul>
  310. </div>
  311. <div class="footer">
  312. &copy; <a href="../copyright.html">Copyright</a> 2001-2023, Python Software Foundation.
  313. <br />
  314. This page is licensed under the Python Software Foundation License Version 2.
  315. <br />
  316. Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
  317. <br />
  318. See <a href="/license.html">History and License</a> for more information.<br />
  319. <br />
  320. The Python Software Foundation is a non-profit corporation.
  321. <a href="https://www.python.org/psf/donations/">Please donate.</a>
  322. <br />
  323. <br />
  324. Last updated on Oct 02, 2023.
  325. <a href="/bugs.html">Found a bug</a>?
  326. <br />
  327. Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.5.0.
  328. </div>
  329. </body>
  330. </html>