<jupyter_start><jupyter_text>얕은복사와 깊은복사- 객체 타입 종류 : mutable, immutable- immutable     - int, float, str, bool    - = 연산자를 쓰고 다른 값을 대입하면 새로운 메모리 생성- mutable    - list, tuple, dict, set    - = 연산자를 쓰면 주소값이 복사<jupyter_code># immutable
data1 = 1
data2 = data1
data3 = 1
data4 = 2
id(data1), id(data2), id(data3), id(data4)
#[1](96) <- data1, data2,data3
#[2](28) <- data4
#[1](96)<-[96](data1)
# mutable
data1 = [1, 2, 3]
data2 = data1 # 얕은 복사 : 주소 복사 : call by reference
data3 = [1, 2, 3]
data4 = data1.copy() # 깊은 복사 : 값 복사 : call by value
id(data1), id(data2), id(data3), id(data4)<jupyter_output><empty_output><jupyter_text>클래스- 코드의 규모가 커져서 변수, 함수를 묶어서 사용- 코드의 규모가 커져서 여러명이 효율적으로 개발하는 방법인 객체지향을 구현- 객체지향 : 실제세계를 모델링해서 개발하는 방법- 객체에는 변수와 메서드가 있다.- 클래스로 만들어진 객체 > mutable<jupyter_code># 생성자, 상속, super, getter-setter, private, spacial method<jupyter_output><empty_output><jupyter_text>링크드 리스트- RAM 영역의 자료구조에서 객체의 데이터와 주소값에 대한 이해하는데 좋은 알고리즘- RAM 영역의 자료구조를 잘 알아야 RAM을 효율적으로 사용할수 있는 코드를 작성할수 있다.- 코딩 테스트에 잘 나오는 기본적인 문제- 단방향 링크드 리스트(Singly Linked List)- 양방향 링크드 리스트(Doubly Linked List)  1. 단방향 링크드 리스트<jupyter_code>class Node:
    def __init__(self,data,next_node=None):
        self.data=data
        self.next_node=next_node
    def __repr__(self):
        return "<Node data:{}, next_node:{}>".format(self.data, id(self.next_node))

n1 = Node(5) #5, None
n2 = Node(7) #7, None
n3 = Node(2) #2, Node
n4 = Node(15) # 15, None

#노드 만들기
n1,n1.next_node
#링크연결
n1.next_node = n2 #n2 객체의 주소값이 n1.next_node 변수에 저장
n1.next_node.data
n2.next_node = n3
n2.next_node.data 
n3.next_node = n4
n3.next_node.data 
n4.next_node=n1
n4.next_node.data 
id(n4), id(n4.next_node.data )<jupyter_output><empty_output><jupyter_text>Quiz 1 : 링크드 리스트의 구현- 아래와 같은 모양을 갖는 링크드 리스트를 구현- [1.파이썬] -> [2.자바] -> [3.HTML] -> [4.CSS] -> [5.Pandas]<jupyter_code># 1. Node 클래스 선언 : 생성자 함수에 data, next_node 변수 선언
class Node:
    def __init__(self,data,next_node=None):
        self.data=data
        self.next_node=next_node
    def __repr__(self):
        return "<Node data:{}, next_node:{}>".format(self.data, id(self.next_node))
# 2. 객체 5개 생성
n1=Node("파이선")
n2=Node("자바")
n3=Node("HTML")
n4=Node("CSS")
n5=Node("Pandas")
# 3. 링크연결
n1.next_node = n2
n2.next_node = n3
n3.next_node = n4
n4.next_node = n5
n5.next_node = None<jupyter_output><empty_output><jupyter_text>Quiz 2 : 링크드 리스트의 데이터 출력- display : 출력 함수 작성- node 객체를 아규먼트로 함수를 호출하면 해당 노드를 포함하여 - 마지막 노드까지 순서대로 데이터 출력- obj is None, while, break, if  ```[1.파이썬] -> [2.자바] -> [3.HTML] -> [4.CSS] -> [5.Pandas]```<jupyter_code>def disp(node):
    current_node = node
    while True:
        print(current_node.data)
        if current_node==None:
            break
        else:
            print("->",end=" ")
        current_node=current_node.next_node
disp(n3)<jupyter_output>HTML
-> CSS
-> Pandas
->
{'fraction_non_alphanumeric': 0.1471738357625311, 'fraction_numerical': 0.03839317454674725, 'mean_word_length': 3.583061889250814, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 35, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '201246', 'license': 'MIT', 'n_tokens_mistral': 1586, 'n_tokens_neox': 1923, 'n_words': 318, 'path': 'python/io,regex,package,linked_list/04_linked_list.ipynb', 'repo_name': 'yeonghwanchoi/TIL', 'size': '2813'}