티스토리 뷰

반응형

그냥 지금 너무 어이가 없어서 저장용

 

A Class에서 list_a와 함께 B class 인스턴스를 생성함

 

B class 내부에서

list_new = list_a 함

 

그리고 B class thread에서 A Class로 signal

signal 받았을 때 list_a의 첫 번째 원소를 삭제하는데

 

list_new도 영향을 받음

 

그래서 B Class 내부에서 list_new = list_a.copy()로 해야함

ㅋㅋ

 

c만 하다 보니 이 상황 자체가 어이없음ㅋㅋ

 

        self.thread_take_out_amount = ThreadTakeOutAmount(
            self.found_compass,
            self.user_input_amount,
        )
        def remove_coordinate(self, index):
            if index < len(self.found_compass):
                del self.found_compass[index]
        
class ThreadTakeOutAmount(QThread):
    delete_element_signal = Signal(int)

    def __init__(self, coordinate, amount):
        super().__init__()

        self.coordinate = coordinate
	def run(self):
    	self.delete_element_signal.emit(i)

 

이러한 현상이 발생하는 주요 원인은 Python의 리스트가 참조형 객체이기 때문입니다. 클래스를 생성할 때 self.found_compassThreadTakeOutAmountcoordinate 인자로 전달하면, ThreadTakeOutAmount 클래스 내의 self.coordinateself.found_compass와 동일한 리스트 객체를 참조하게 됩니다. 즉, 하나의 리스트 객체에 대해 두 변수가 참조를 공유하고 있습니다. 따라서 found_compass 리스트에서 요소가 삭제되면, 이 변경 사항이 self.coordinate에도 반영됩니다.

댓글

티스토리 방명록

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday