Skip to content

[Add test case] Bug in return type of deque.copy() in generic type #12641

Closed
@NiklasRosenstein

Description

@NiklasRosenstein

Bug Report

Mypy reasons incorrectly about the return type of collections.deque.copy() if the item type is a generic with a type parameter inside a generic class.

To Reproduce

from collections import deque
from typing import Any, Callable, Generic, List, Protocol, TypeVar

T = TypeVar("T")

def test(item_type: T) -> None:
    a: deque[List[T]] = deque()
    b: deque[List[T]] = a.copy()  # ok


class Test(Generic[T]):
    def test(self) -> None:
        a: deque[List[T]] = deque()
        b: deque[List[T]] = a.copy()  # error: Incompatible types in assignment (expression has type "deque[List[List[T]]]", variable has type "deque[List[T]]")  [assignment]

Expected Behavior

The return type in the above example should be List[T] not List[List[T]].

Your Environment

  • Mypy version used: 0.942

  • Mypy command-line flags: mypy test.py

  • Mypy configuration options from mypy.ini (and other config files):

    [tool.mypy]
    strict = true
    namespace_packages = true
    ignore_missing_imports = true
    show_error_codes = true
    exclude = "tests"
  • Python version used: 3.10.2

  • Operating system and version: OSX 12.2.1 Monterey

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions