#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http

제목class 관련 질문2024-06-01 11:47
작성자
class Server:

    def __init__(self):
        self.numorderlist = []
        self.numlist = []
        self.orderlist = []


    def makeOrder(self, num, orderlist):
       
        if not num in self.numlist:
            self.numorderlist.append([num, orderlist])
            self.numlist.append(num)
            self.orderlist.append(orderlist)
            return [num, orderlist]

        else:
            return -1


    def giveService(self, num, plusorder): #why???????????????

        if num in self.numlist:
            idx = self.numlist.index(num)

            if isinstance(plusorder, str):
                self.orderlist[idx].append(plusorder)
                self.numorderlist[idx][1].append(plusorder)

            else:
                self.orderlist[idx].extend(plusorder)
                self.numorderlist[idx][1].extend(plusorder)

            return self.numlist[idx], self.orderlist[idx]

        else:
            return -1, -1

s = Server()
s.makeOrder('0001', ['pizza', 'pie'])
s.makeOrder('0002', ['pizza', 'pie', 'pasta'])
s.makeOrder('0003', ['pizza'])
print(s.giveService('0002', 'coke'))
print(s.numlist)
print(s.orderlist)
print(s.numorderlist)


위 프로그램을 실행하면
('0002', ['pizza', 'pie', 'pasta', 'coke', 'coke']) ['0001', '0002', '0003'] [['pizza', 'pie'], ['pizza', 'pie', 'pasta', 'coke', 'coke'], ['pizza']] [['0001', ['pizza', 'pie']], ['0002', ['pizza', 'pie', 'pasta', 'coke', 'coke']], ['0003', ['pizza']]]
가 출력됩니다.

giveService 항목에서 'coke'하나만 추가했는데 어째서 'coke'가 2번 출력되나요??
보니까
                self.orderlist[idx].append(plusorder)
                self.numorderlist[idx][1].append(plusorder)

이 항목에서 위나 아래 하나만 실행돼도 orderlist와 numorderlist가 서로 동기화(?)되어 정보가 입력됩니다.
그래서 위 실행은 결국 정보를 2번 입력하는 꼴이 됩니다. 하지만
생성자, makeOrder 매서드, giveService 매서드 그 어느 것에서도
orderlist와 numorderlist 사이에 관계를 정의한 적이 없는데 어째서 이런 일이 발생하는 건가요?


 
댓글