Skip to content

PyUnicode_InternFromString does not immortalize the string as the document claims #133260

Closed
@yuyichao

Description

@yuyichao

Documentation

The document for PyUnicode_InternFromString currently claimed that

CPython implementation detail: Strings interned this way are made immortal.

However, testing with simple code like,

        auto v = PyUnicode_InternFromString("abcdefg_aaaaa");
        / PyUnicode_InternImmortal(&v);
        printf("immortalized? %d\n", _Py_IsImmortal(v));

suggests that the returned value is not, which is expected based on the code since it calls _PyUnicode_InternMortal rather than _PyUnicode_InternImmortal. If a call to the internal API PyUnicode_InternImmortal was added (as in the commented out code above), then the string is indeed immortalized.

This document was added in #121364 but that PR did not change the behavior of this function. AFAICT, PyUnicode_InternFromString never immortalize the string ever since it was added in #120520.

The only public API that ever immortalized the input string appears to be PyUnicode_InternInPlace and that was changed in #121364 (the one that added the wrong doc) and there doesn't seem to be any public API that immortalize the string anymore. Although this is technically a document issue, I think it might be better to change the behavior of the function instead to match the document.

Linked PRs

Activity

added
type-bugAn unexpected behavior, bug, or error
interpreter-core(Objects, Python, Grammar, and Parser dirs)
and removed
docsDocumentation in the Doc dir
on May 1, 2025
picnixz

picnixz commented on May 4, 2025

@picnixz
Member

Either it's a doc issue or it's an implementation issue. So I'll let both tags.

neonene

neonene commented on May 5, 2025

@neonene
Contributor
added a commit that references this issue on May 19, 2025

pythongh-133260: Remove claim that PyUnicode_InternFromString immorta…

encukou

encukou commented on May 19, 2025

@encukou
Member

Oh, good catch! Thanks! I did miss that in #121364 :/
Given that 3.13 is in bugfix-only mode, I'll remove the docs note and backport that.

@colesbury: PyUnicode_InternFromString can start immortalizing the string in main and possibly 3.14. Will it help free-threading?

added a commit that references this issue on May 29, 2025

gh-133260: Remove claim that PyUnicode_InternFromString immortalizes (G…

4109a9c
added a commit that references this issue on May 29, 2025

pythongh-133260: Remove claim that PyUnicode_InternFromString immorta…

8 remaining items

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    docsDocumentation in the Doc dirinterpreter-core(Objects, Python, Grammar, and Parser dirs)topic-C-APItype-bugAn unexpected behavior, bug, or error

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      PyUnicode_InternFromString does not immortalize the string as the document claims · Issue #133260 · python/cpython

      Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

      Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant