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

제목작년 중간고사 SWCON104-01 3번 예시답안, 풀이입니다.(+ 리스트 설명)2019-10-17 21:47
작성자


--------------------------------------------------------------------


이론설명


일단 무작정 따라해 봅시다. (얼마 안걸립니다.)


1. 바탕화면에 폴더 하나를 만듭니다.

2. 만든 폴더 이름을 a라고 하고 들어간 뒤 아무 파일이나 넣습니다.

3. 다시 바탕화면으로 나와서 폴더 'a'를 오른클릭 하신 후 바로가기 만들기를 누릅니다.

4. 만들어진 바로가기 이름을 b라고 저장합니다.

5. b를 더블클릭해서 들어간 뒤 아무 파일을 지우거나 이름을 바꾼 뒤 a폴더에 들어가면 a에도 변경됨을 볼 수 있습니다.


그대로 a와 b를 들고 내려와서...파이썬에 비교하자면

a=[1,5,7,2]

b=a

b[i]=9

print(a)

>>>[1,9,7,2]

로 해준 것과 같습니다. 강의자료에서는 aliasing이라 합니다.


###### 정리 : a = 폴더 b = 바로가기


나는 list(폴더)를 만들고 싶은데 바로가기가 만들어 졌네?


아까 만든 바로가기를 지우고 이름이 b 인 폴더를 만듭니다.

a안의 파일들을 모두 ctrl+c 한 뒤 폴더'b'에 ctrl+v합니다.

그럼 b에서 뭘 삭제해도 a폴더에서는 아무것도 없어지지 않겠죠.

이것이 b=a[:]입니다. 


###### 정리 : a = 폴더, b = 폴더


그럼 2차원 list는요?

폴더안에 폴더가 들어있다고 생각하면 됩니다.


a=[[1,2],[3,4]]  # 폴더안에 두개의 폴더가 있고 각 폴더에 파일이 2개씩 있다.


이 때 b = a[:]를 해주면


b[0] = a[0]

b[1] = a[1]


이런식으로 연산이 됩니다.


어! a[0]와 a[1]은 list니까 b[0]과 b[1]은 바로가기 역활밖에 못하겠네요!


그럼 a[0]와 a[1]안에 들어가서 값들을 복사해와야 겠죠?


문제로 갑시다.



a = [[1,2],[3,4]]
b=a[:] # 일단 통째로 복사해옵니다.

for i in range(len(a)): # a에 들은 개수만큼 반복, a는 [1,2]와 [3,4] 이렇게 2개를 가지고 있습니다.
    if type(b[i]) == list: #b[i]의 타입이 리스트(즉, 바로가기)라면
        b[i] = a[i][:] #b를 폴더로 만들어 주기 위해 a[i]안에 들어가 파일들을 복사해옵니다.

#이 밑은 제대로 됬는지 확인하는 코드입니다.
for i in range(2):
    for j in range(2):
        b[i][j] += 1
    
print(a)
print(b)
댓글