Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

slice not hashable #84783

Closed
WillBradshaw mannequin opened this issue May 12, 2020 · 9 comments
Closed

slice not hashable #84783

WillBradshaw mannequin opened this issue May 12, 2020 · 9 comments
Assignees
Labels
3.12 interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement

Comments

@WillBradshaw
Copy link
Mannequin

WillBradshaw mannequin commented May 12, 2020

BPO 40603
Nosy @rhettinger, @stevendaprano, @remilapeyre, @isdanni
Files
  • patches.zip: patch to add slicing functionality to slices
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2020-05-12.01:23:39.253>
    labels = ['interpreter-core', 'easy', 'type-feature', '3.9']
    title = 'slice not hashable'
    updated_at = <Date 2020-05-12.08:34:03.335>
    user = 'https://bugs.python.org/WillBradshaw'

    bugs.python.org fields:

    activity = <Date 2020-05-12.08:34:03.335>
    actor = 'remi.lapeyre'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Interpreter Core']
    creation = <Date 2020-05-12.01:23:39.253>
    creator = 'Will Bradshaw'
    dependencies = []
    files = ['49149']
    hgrepos = []
    issue_num = 40603
    keywords = ['easy (C)']
    message_count = 5.0
    messages = ['368693', '368694', '368696', '368700', '368708']
    nosy_count = 5.0
    nosy_names = ['rhettinger', 'steven.daprano', 'remi.lapeyre', 'isdanni', 'Will Bradshaw']
    pr_nums = []
    priority = 'normal'
    resolution = None
    stage = None
    status = 'open'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue40603'
    versions = ['Python 3.9']

    Linked PRs

    @WillBradshaw
    Copy link
    Mannequin Author

    WillBradshaw mannequin commented May 12, 2020

    slice cannot be hashed which make some operations significantly more annoying. see https://groups.google.com/forum/#!topic/comp.lang.python/SvhkWwSDeIw

    @WillBradshaw WillBradshaw mannequin added type-bug An unexpected behavior, bug, or error expert-ctypes 3.9 labels May 12, 2020
    @stevendaprano
    Copy link
    Member

    Please re-upload the patch file as an uncompressed text file, as it is quite difficult for many people to view zip files in their browser.

    @stevendaprano stevendaprano changed the title slice does not slice slice not hashable May 12, 2020
    @stevendaprano stevendaprano changed the title slice does not slice slice not hashable May 12, 2020
    @stevendaprano stevendaprano added interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement and removed expert-ctypes type-bug An unexpected behavior, bug, or error labels May 12, 2020
    @rhettinger
    Copy link
    Contributor

    This is a reasonable use case.

    +1 for making slice() hashable.

    Will, you're welcome to submit a PR. If not, I'm sure someone else would be happy to scoop this up :-)

    @isdanni
    Copy link
    Mannequin

    isdanni mannequin commented May 12, 2020

    Would be happy to help with this. Sent a PR soon ;)

    @remilapeyre
    Copy link
    Mannequin

    remilapeyre mannequin commented May 12, 2020

    I think slices were explicitly made not hashable to avoid issues to avoid issues with dictionaries, see discussion at https://mail.python.org/pipermail/python-list/2001-March/076101.html and bpo-408326.

    The commit that did this is a1351fb

    Is this not needed anymore? Wouldn't this need to be discussed on python-ideas?

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    @rhettinger
    Copy link
    Contributor

    rhettinger commented Feb 18, 2023

    Guido, what are your thoughts on this proposal?

    On the one hand, the OP has a legitimate use case:

    I have an object that presents itself as a multidimensional array in the numpy style but is computes it's values on _getitem_ calls as it represents an infinite field of numbers. However this operation is expensive. In many cases the same slice of the field will be needed repeatedly. This lends itself to using an lru cache on _getitem_() however this does not work as slices cannot be stored in the dictionary key used for the lru_cache.

    On the other hand, slice literals for mappings are a mixed bag, possibly useful in some cases, possibly surprising in others:

    >>> d = {'hello': 1, 'world': 2}
    >>> d['hello': 'world']
    Traceback:
       ...
    KeyError:  slice('hello', 'world', None)  
    

    I like the idea of being able to cache array or sequence slices but worry about opening a can of worms for the general case.

    @gvanrossum
    Copy link
    Member

    I think this is fine. The "danger" of d[a:b] seems overstated, it produces a clear KeyError.

    @rhettinger
    Copy link
    Contributor

    @gvanrossum Thanks for the looking at this.

    @gvanrossum
    Copy link
    Member

    Note that this still needs a “what’s new” entry, since it is a new feature and might even trip some folks up (see the test changes needed).

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.12 interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement
    Projects
    None yet
    Development

    No branches or pull requests

    3 participants