[얕은 복사]
- 파이썬 자체 함수인 id() 를 통해서 메모리의 id를 확인하여 깊은 복사를 했는지 얕은 복사를 했는지 구별할 수 있다.
scores = [9,8,5,7,6,10]
# 얕은 복사
scoresCopy = scores
print(f'id(scores):{id(scores)}') #id는 메모리에 할당된 값을 찍어보는 것
print(f'id(scoresCopy):{id(scoresCopy)}')
print()
'''
id(scores):1342407589568
id(scoresCopy):1342407589568
'''
[깊은 복사1]
- 리스트 함수 append()를 통해 요소 값 만을 복사해오는 방식으로 깊은 복사를 할 수 있다.
#깊은 복사1
scoresCopy1 = []
for s in scores:
scoresCopy1.append(s)
print(f'id(scores) : {id(scores)}')
print(f'id(scoresCopy1) : {id(scoresCopy1)}')
print()
'''
id(scores) : 1342407589568
id(scoresCopy1) : 1342407523776
'''
[깊은 복사2]
- .리스트 함수인 extend() 를 통해 요소 값들을 한꺼번에 복사해와 깊은 복사를 할 수 있다.
# 깊은 복사2
scoresCopy2 = []
scoresCopy2.extend(scores)
print(f'id(scores) : {id(scores)}')
print(f'id(scoresCopy2) : {id(scoresCopy2)}')
print()
'''
id(scores) : 1342407589568
id(scoresCopy2) : 1342407580352
'''
[깊은 복사3]
- 파이썬에서는 객체에 copy() 라는 함수를 제공해줘, 깊은 복사가 가능하게 해준다.
# 깊은 복사3
scoresCopy3 = scores.copy()
print(f'id(scores) : {id(scores)}')
print(f'id(scoresCopy3) : {id(scoresCopy3)}')
print()
'''
id(scores) : 1342407589568
id(scoresCopy3) : 1342407580736
'''
[깊은 복사4]
- 슬라이싱을 이용해 하는 깊은 복사도 있다.
# 깊은 복사4
scoresCopy4 = scores[:]
print(f'id(scores) : {id(scores)}')
print(f'id(scoresCopy4) : {id(scoresCopy4)}')
print()
'''
id(scores) : 1342407589568
id(scoresCopy4) : 1342407581248
'''
[실습] 선수의 원본 점수를 이용해 평균을 출력하고 최고값과 최저값을 제외한 평균을 출력하는 프로그램을 만들어보자.
playOriSco = [8.7,9.1,8.9,9.0,7.9,9.5,8.8,8.3]
playCopSco = playOriSco.copy()
playOriSco.sort()
playCopSco.sort()
playCopSco.pop()
playCopSco.pop(0)
avgOri = round(sum(playOriSco)/len(playOriSco),2)
avgCop = round(sum(playCopSco)/len(playCopSco),2)
print(f'원선수들 점수 {playOriSco}')
print(f'복사한 선수들 점수{playCopSco}')
print(f'원선수들 평균 {avgOri}')
print(f'복사한 선수들 평균 {avgCop}')
print(f'차이 : {round(avgOri - avgCop,2)}')
원선수들 점수 [7.9, 8.3, 8.7, 8.8, 8.9, 9.0, 9.1, 9.5]
복사한 선수들 점수[8.3, 8.7, 8.8, 8.9, 9.0, 9.1]
원선수들 평균 8.78
복사한 선수들 평균 8.8
차이 : -0.02
pop(), sort() 등의 리스트 함수에 대해서는 후에 자료구조&알고리즘 을 다룰 때 자세히 볼 일이 있을 것이다.
'AboutPython' 카테고리의 다른 글
[파이썬] 생성자, __init__() 호출, super() (0) | 2022.05.04 |
---|---|
[파이썬] 상속 (0) | 2022.05.03 |
[파이썬] 객체와 메모리 (0) | 2022.05.03 |
[파이썬] 객체 속성 변경 (0) | 2022.05.03 |
[파이썬] 클래스와 객체 생성 (0) | 2022.05.03 |