[New-bugs-announce] [issue46572] Unicode identifiers not necessarily unique

Diego Argueta report at bugs.python.org
Sat Jan 29 12:06:08 EST 2022


New submission from Diego Argueta <diego.argueta at gmail.com>:

The way Python 3 handles identifiers containing mathematical characters appears to be broken. I didn't test the entire range of U+1D400 through U+1D59F but I spot-checked them and the bug manifests itself there:

    Python 3.9.7 (default, Sep 10 2021, 14:59:43) 
    [GCC 11.2.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.

    >>> foo = 1234567890
    >>> bar = 1234567890
    >>> foo is bar
    False
    >>> 𝖇𝖆𝖗 = 1234567890

    >>> foo is 𝖇𝖆𝖗
    False
    >>> bar is 𝖇𝖆𝖗
    True

    >>> 𝖇𝖆𝖗 = 0
    >>> bar
    0


This differs from the behavior with other non-ASCII characters. For example, ASCII 'a' and Cyrillic 'a' are properly treated as different identifiers:

    >>> а = 987654321    # Cyrillic lowercase 'a', U+0430
    >>> a = 123456789    # ASCII 'a'
    >>> а        # Cyrillic
    987654321
    >>> a        # ASCII
    123456789


While a bit of a pathological case, it is a nasty surprise. It's possible this is a symptom of a larger bug in the way identifiers are resolved.

This is similar but not identical to https://bugs.python.org/issue46555

Note: I did not find this myself; I give credit to Cooper Stimson (https://github.com/6C1) for finding this bug. I merely reported it.

----------
components: Parser, Unicode
messages: 412084
nosy: da, ezio.melotti, lys.nikolaou, pablogsal, vstinner
priority: normal
severity: normal
status: open
title: Unicode identifiers not necessarily unique
type: behavior
versions: Python 3.7, Python 3.8, Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue46572>
_______________________________________


More information about the New-bugs-announce mailing list