본문으로 건너뛰기

[CPython] pickle fast_save_enter() 테스트 정리 및 불필요한 wrapper 제거

PR 링크: python/cpython#146509 (3.14), #146510 (3.13) 상태: Merged | 변경: +10 / -14

들어가며

CPython의 pickle 모듈 테스트에서 fast_save_enter() 관련 테스트 코드가 불필요하게 복잡했습니다. 테스트 데이터를 {"key": data} dict로 한 번 더 감싸는 wrapper가 있었는데, 이는 테스트의 의도(중첩 구조 직렬화 검증)와 무관한 추가 레이어였습니다.

핵심 코드 분석

1. fast_save_enter에서 불필요한 dict wrapper 제거

Before:

def fast_save_enter(self, create_data, minprotocol=0):
    # gh-146059: Check that fast_save() is called when
    # fast_save_enter() is called.
    data = [create_data(i) for i in range(FAST_NESTING_LIMIT * 2)]
    data = {"key": data}

After:

def fast_save_enter(self, create_data, minprotocol=0):
    # gh-146059: Check that fast_save_leave() is called when
    # fast_save_enter() is called.
    data = [create_data(i) for i in range(FAST_NESTING_LIMIT * 2)]

data = {"key": data} 줄이 제거되었습니다. 이 dict wrapper는 fast_save 메커니즘 테스트에 필요하지 않았습니다.

2. deep_nested_struct에서 seed 매개변수 제거

Before:

def deep_nested_struct(self, seed, create_nested, ...):
    data = seed
    for i in range(depth):
        data = create_nested(data)
    data = {"key": data}

def test_deep_nested_struct_tuple(self):
    self.deep_nested_struct((1,), lambda data: (data,))

After:

def deep_nested_struct(self, create_nested, ...):
    data = None
    for i in range(depth):
        data = create_nested(data)

def test_deep_nested_struct_tuple(self):
    self.deep_nested_struct(lambda data: (data,))

seed 매개변수가 제거되고 data = None으로 시작합니다. create_nested 람다가 첫 호출에서 None을 받아 처리하므로, 별도의 seed가 불필요합니다. 주석도 fast_save()에서 fast_save_leave()로 정정되었습니다.

왜 이게 좋은가

  • 테스트 의도 명확화: 불필요한 dict wrapper를 제거하여 "중첩 구조 직렬화"라는 테스트 목적이 더 명확해졌습니다.
  • API 단순화: deep_nested_structseed 매개변수 제거로 호출이 간결해졌습니다.
  • 주석 정정: fast_save() -> fast_save_leave()로 함수명 오류를 수정하여 코드 이해를 돕습니다.

정리

테스트 코드의 불필요한 복잡성을 제거하는 정리 작업입니다. 기능 변경은 없지만, 테스트의 가독성과 유지보수성이 향상됩니다.

참고 자료


이 포스트는 AI가 작성하였으며, 사실과 다를 수 있습니다. 정확한 정보는 원본 PR을 참고해 주세요.

댓글

관련 포스트

PR Analysis 의 다른글