오늘은 파이썬의 기초를 공부했습니다.

 

1. 슬라이싱 : 문자열의 일부를 가져오는 것

juminNum = "830276-1234569"
print(juminNum[:][2:6][-2])

=> 7

위 코드의 결과는 7입니다. 

juminNum[:]은 830276-1234569, 즉 문자열 전체를 가져오고

juminNum[:][2:6]는 juminNum[:]의 [2:6]에 해당하는 0276을 가져옵니다.

juminNum[:][2:6]는 0276의 인덱스 -2 값은 7입니다.

 


 

2. 대소문자

Word = "PYthon3"
WORD = Word.upper()
word = Word.lower()
print(Word, WORD, word)

=> PYthon3 PYTHON3 python3

여기서 두가지 사실을 알 수 있습니다.

1. upper와 lower 명령어를 통해 문자열을 대문자와 소문자로 변경할 수 있다.

2. 파이썬의 변수는 대소문자를 구분한다.

 


 

3. 문자열 변경 : 대부분의 문서 편집 툴에 있는  "찾기 및 대치"에 해당

word = "apple"
word = word.replace("p", "q")
print(word)

=> aqqle

 


4. 파이썬에서의 메모리 관리 방식

더보기
더보기

파이썬의 데이터 저장과 변수 바인딩

핵심 개념

1. 변수는 상자가 아니라 '라벨(이름표)'이다

파이썬에서 변수는 데이터를 직접 담는 상자가 아니에요. 메모리 어딘가에 있는 데이터 객체에 붙이는 이름표 같은 거죠.

word = 'apple'  
# 'apple'이라는 문자열 객체가 메모리 어딘가(주소: 4373983536)에 생성됨
# word는 그 객체를 가리키는 이름표

코드 분석

# 1단계
word = 'apple'
print(id(word))  # 4373983536
# 메모리에 'apple' 객체 생성, word가 이를 가리킴

# 2단계
word = word.replace("p", "q")
print(id(word))  # 4378922672 (주소 변경!)
# 'apple'은 불변 객체라서 수정 불가
# 'aqqle'이라는 새로운 객체 생성
# word가 새 객체를 가리키도록 재바인딩

# 3단계
word = 'apple'
print(id(word))  # 4373983536 (원래 주소로 복귀!)
# 파이썬이 이미 메모리에 있는 'apple' 객체를 재사용
# 이것이 "문자열 인터닝(String Interning)"

# 4단계
word = 'banana'
print(id(word))  # 4378922288 (다른 주소)
# 'banana'는 새로운 객체이므로 다른 주소

# 5단계
word = 'apple'
print(id(word))  # 4373983536 (다시 같은 주소!)
# 또다시 기존 'apple' 객체 재사용

중요한 특징들

1. 문자열은 불변(Immutable)이다

word = 'apple'
# word[0] = 'A'  # 에러 발생! 문자열은 수정 불가
word = 'Apple'   # 새로운 객체 생성 후 재바인딩만 가능

2. 문자열 인터닝 (String Interning) 파이썬은 같은 문자열을 여러 번 만들지 않고 재사용해요. 메모리 절약을 위해서죠.

a = 'apple'
b = 'apple'
print(id(a))  # 4373983536
print(id(b))  # 4373983536 (같은 주소!)
print(a is b)  # True (같은 객체를 가리킴)

3. 재바인딩(Rebinding) 변수에 새 값을 할당하면 다른 객체를 가리키게 돼요.

word = 'apple'   # word → 'apple' 객체
word = 'banana'  # word → 'banana' 객체 (다른 객체!)

시각적 이해

메모리 상황:

[주소: 4373983536]  'apple' ◄── word (1단계, 3단계, 5단계)
[주소: 4378922672]  'aqqle' ◄── word (2단계)
[주소: 4378922288]  'banana' ◄── word (4단계)

실습으로 확인하기

# 여러 변수가 같은 객체를 가리킬 수 있음
a = 'hello'
b = 'hello'
c = 'hello'
print(id(a), id(b), id(c))  # 모두 같은 주소!

# 리스트는 가변(mutable)이라서 다르게 동작
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(id(list1), id(list2))  # 다른 주소!

핵심 정리

  1. 변수 = 이름표: 변수는 객체를 가리키는 참조일 뿐
  2. 문자열 = 불변: 수정하면 새 객체 생성
  3. 인터닝: 같은 문자열은 재사용됨
  4. id(): 객체의 메모리 주소(정체성)를 반환

 

+ Recent posts