DataFrame와 numpy 또는 torch 객체와의 메모리 공유

김명섭·2024년 9월 14일

list 객체, numpy의 ndarray 객체 , pytorch의 tensor 객체 3개로 실험
각각으로 만든 DataFrame 객체가 수정되면, ndarray 객체와 tensor 객체가 수정된다. 즉 메모리를 공유하고 있다고 추측된다.
list는 메모리를 공유하는 방식이 아니라 DataFrame 객체가 수정된다고 list 객체가 수정되진 않았다.

왜 그런지 확인해보자.

DataFrame 클래스의 init을 확인해보면, ndarray 객체가 아니고, is_list_like 함수를 True로 하는 객체이고, Sequence 객체가 아니라면, array 메소드를 가지고 있는지 확인해본다.

torch tensor 클래스는 array 메소드를 가지고 있다.
따라서, data = np.asarray(data)가 실행된다.


np.asarray를 실행해보면, torch tensor 객체(data)로 만든 numpy ndarray 객체(new_data)가 메모리를 공유하는 것을 알 수 있다.

DataFrame 객체는 수치형 데이터를 ndarray 객체로 저장하는 것으로 알고있다.
따라서, ndarray 객체로 DataFrame 객체를 만들 땐, 당연하게 메모리를 공유하고,
tensor 객체로 DataFrame 객체를 만들 땐, 메모리를 공유하는 ndarray 객체로 바꾸는 작업을 하고(정확히는 기존 변수명이 참조하고 있는 객체가 tensor에서 ndarray로 바뀐 것) 이를 통해 tensor 객체로 만들어도 메모리를 공유하게 되는 듯 하다.

profile
ML Engineer

0개의 댓글