Skip to content

Commit ad077aa

Browse files
authored
PERF: Improve efficiency of BlockValuesRefs._clear_dead_references(...) (#59643)
Improve performance of BlockValuesRefs._clear_dead_references(...)
1 parent 220c18d commit ad077aa

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

pandas/_libs/internals.pyx

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
from collections import defaultdict
22

33
cimport cython
4+
from cpython.object cimport PyObject
45
from cpython.pyport cimport PY_SSIZE_T_MAX
56
from cpython.slice cimport PySlice_GetIndicesEx
6-
from cpython.weakref cimport PyWeakref_NewRef
7+
from cpython.weakref cimport (
8+
PyWeakref_GetObject,
9+
PyWeakref_NewRef,
10+
)
711
from cython cimport Py_ssize_t
812

913
import numpy as np
@@ -26,6 +30,10 @@ from pandas._libs.util cimport (
2630
)
2731

2832

33+
cdef extern from "Python.h":
34+
PyObject* Py_None
35+
36+
2937
@cython.final
3038
@cython.freelist(32)
3139
cdef class BlockPlacement:
@@ -902,7 +910,8 @@ cdef class BlockValuesRefs:
902910
# see GH#55245 and GH#55008
903911
if force or len(self.referenced_blocks) > self.clear_counter:
904912
self.referenced_blocks = [
905-
ref for ref in self.referenced_blocks if ref() is not None
913+
ref for ref in self.referenced_blocks
914+
if PyWeakref_GetObject(ref) != Py_None
906915
]
907916
nr_of_refs = len(self.referenced_blocks)
908917
if nr_of_refs < self.clear_counter // 2:

0 commit comments

Comments
 (0)