diff --git a/pandas/_libs/lib.pyx b/pandas/_libs/lib.pyx index cded299f77876..3b7d659c2150e 100644 --- a/pandas/_libs/lib.pyx +++ b/pandas/_libs/lib.pyx @@ -2,6 +2,7 @@ from collections import abc from decimal import Decimal from enum import Enum from sys import getsizeof +from types import GenericAlias from typing import ( Literal, _GenericAlias, @@ -1298,7 +1299,7 @@ cdef bint c_is_list_like(object obj, bint allow_sets) except -1: getattr(obj, "__iter__", None) is not None and not isinstance(obj, type) # we do not count strings/unicode/bytes as list-like # exclude Generic types that have __iter__ - and not isinstance(obj, (str, bytes, _GenericAlias)) + and not isinstance(obj, (str, bytes, _GenericAlias, GenericAlias)) # exclude zero-dimensional duck-arrays, effectively scalars and not (hasattr(obj, "ndim") and obj.ndim == 0) # exclude sets if allow_sets is False diff --git a/pandas/tests/dtypes/test_inference.py b/pandas/tests/dtypes/test_inference.py index db98751324ebc..7fd0395009adb 100644 --- a/pandas/tests/dtypes/test_inference.py +++ b/pandas/tests/dtypes/test_inference.py @@ -250,6 +250,15 @@ class MyDataFrame(DataFrame, Generic[T]): ... assert inference.is_list_like(tst) +def test_is_list_like_native_container_types(): + # GH 61565 + # is_list_like was yielding false positives for native container types + assert not inference.is_list_like(list[int]) + assert not inference.is_list_like(list[str]) + assert not inference.is_list_like(tuple[int]) + assert not inference.is_list_like(tuple[str]) + + def test_is_sequence(): is_seq = inference.is_sequence assert is_seq((1, 2))