π¨β°πΒ [Python] μκ°λ³΅μ‘λ 2
Theme 1. μ
λ ₯ λͺ¨λ
""" Compare to Input module """
import sys
N = int(inputs())
K = int(sys.stdin.readline())
νμ΄μ¬μμ μ¬μ©μλ‘λΆν° μ
λ ₯μ λ°λ λͺ¨λμ λ³΄ν΅ inputs()
, sys.stdin.readline()
μ μ¬μ©νλ€. inputs()
λ μ
λ ₯ λ°λ λ°μ΄ν°μ κΈΈμ΄κ° κΈΈκ³ , λ§μμ§μλ‘ μ
λ ₯ ν¨μ¨μ΄ λ¨μ΄μ§λ λ¨μ μ΄ μλ€. κ·Έλμ μ΄λ₯Ό 보μνκΈ° μν΄ λλΆλΆμ μ½λ©ν
μ€νΈ νκ²½μμ μ
λ ₯μ λ°μ λλ sys.stdin.readline()
λ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€. μ΄μ°¨νΌ ν
μ€νΈ μΌμ΄μ€κ° λ§€μ° κΈΈκ³ λ§κΈ° λλ¬Έμ μΌλ°μ μΌλ‘λ νμκ° ν¨μ¬ ν¨μ¨μ μ΄λ€.
νμ§λ§ λ§μ½, λ¬Έμ 쑰건μμ μ£Όμ΄μ§λ μ
λ ₯ λ°μ΄ν°μ κ°μμ κ·Έ ννκ° μ κ³ λ¨μν νΈμ΄λΌλ©΄ μ μμ μ¬μ©λ κ³ λ €ν΄μΌ νλ€. νμλ κΈ°λ³Έμ μΌλ‘ sys
λͺ¨λ λ΄λΆμ λ΄μ₯λ λ©μλλΌμ sys
λͺ¨λμ λΆλ¬μμΌ νλ€. λͺ¨λμ import
νλ μκ°λ κ½€λ 걸리기 λλ¬Έμ, λ°μ΄ν°κ° λ¨μνλ€λ©΄ μ μ μ¬μ©λ κ³ λ €ν΄λ³΄μ.
Theme 2. μ μΈ/ν λΉ/μ¬κ΅¬μ± νμ μ€μ΄κΈ°
νμ΄μ¬μ μλ£κ΅¬μ‘° μ¬μ©μ μν΄ λͺ
μμ μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ ν΄μ νλ κ³Όμ μ΄ μλ΅λμ΄ μμ΄μ, μ΄ λΆλΆμ λν μΈμ§λ₯Ό νμ§ λͺ»νλ κ²½μ°κ° λ§λ€. νμ§λ§ C/C++/JAVA νΉμ μ΄μ체μ 곡λΆλ₯Ό ν΄λ΄€λ€λ©΄ μ κ²μ΄λ€. λ©λͺ¨λ¦¬ ν λΉμ μꡬνλ μΌμ΄ μΌλ§λ μκ°μ λ§μ΄ μ‘μ λ¨Ήλ μΌμΈμ§ λ§μ΄λ€. νλ‘κ·Έλλ¨Έκ° μμ±ν μ½λμμ λ©λͺ¨λ¦¬ ν λΉμ μꡬνλ€λ©΄, μ»΄νμΌλ¬/μΈν°ν리ν°λ μ΄μ체μ 컀λμ λ©λͺ¨λ¦¬ ν λΉμ μꡬν΄μΌ νλ€. κ·Έ λ€μ 컀λμ λ€μ κ°μ₯ κΉμν κ³³κΉμ§ λ΄λ €κ° λ©λͺ¨λ¦¬ ν λΉμ νλμ¨μ΄μ μμ²ν λ€, μμ
κ²°κ³Όλ₯Ό μ»΄νμΌλ¬μ μ λ¬ν΄μΌ νλ€. λ°λΌμ μ΅λν ν λΉ
κ³Ό μ¬κ΅¬μ±
νλ μκ°μ μ€μ¬μΌ ν¨μ¨μ μΌλ‘ μ½λλ₯Ό μμ±ν μ μλ€.
""" 1. 리μ€νΈ κ³±μ
"""
arr1 = [0 for _ in range(100)]
arr2 = [0] * 100
arr1, arr2λ λͺ¨λ κΈΈμ΄κ° 100μ΄κ³ λͺ¨λ μμκ°μ΄ 0μΈ κ°μ λ°°μ΄(리μ€νΈ)μ κ°μ§κ² λλ€. νμ§λ§, μ€ν μκ°μ μ΄λμͺ½μ΄ λ λΉ λ₯ΌκΉ?? νμκ° λΉμ°ν λ λΉ λ₯΄λ€. νμλ μ¬κ΅¬μ±(resize)
μ°μ° μμ΄ ν λ²μ ν λΉμ΄ λ§λ¬΄λ¦¬ λκΈ° λλ¬Έμ΄λ€. λ°λ©΄ μ μλ μ μΈ
κ³Ό ν λΉ
λ° μ¬κ΅¬μ±
μμ μ΄ μλ‘ λ€λ₯΄λ€. κ·Έλμ μΌμ νμλ§λ€ μ¬κ΅¬μ±
μ°μ°μ΄ νμν΄μ§λ€. μμλ μΈκΈνλ―, 컀λμ λ©λͺ¨λ¦¬λ₯Ό μꡬνλ νμκ° μμμ§λκ² μ€ν μκ°μ μ 리νλ€. λ°λΌμ λͺ
λ°±ν νμμ μ€ν μκ°μ΄ λ λΉ λ₯΄λ€.
νμ§λ§, 리μ€νΈ κ³±μ μ μ¬μ©ν λ λ°λμ μ£Όμν΄μΌν μ μ΄ μλ€. λ°©κΈ μ΄ν΄λ³Έ μμλ 1μ°¨μ λ°°μ΄μ 리μ€νΈ κ³±μ μ νκΈ° λλ¬Έμ, μ΄ν ν΄λΉ λ°°μ΄μ μ‘°μν΄λ λ¬Έμ κ° λ°μνμ§ μλλ€. νμ§λ§, 2μ°¨μ λ°°μ΄μ 리μ€νΈ κ³±μ νμ¬ μ μΈνλ©΄ μ΄λ»κ² λ κΉ??
arr1 = [[0, 0]]*5
arr2 = [[0, 0] for _ in range(5)]
# Question 1.
for i in range(5):
arr1[i][0] += 1
# Question 2.
for i in range(5):
arr2[i][0] += 1
1λ²κ³Ό 2λ²μ μΌμ΄μ€μ λν μΆλ ₯μ μμΈ‘ν΄λ³΄μ. μ΄λ»κ² λμ¬κΉ??
# Question 1.
>>> [[0, 5], [0, 5], [0, 5], [0, 5], [0, 5]]
# Question 2.
>>> [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]
μΌν 보기μλ λκ°μ κ²°κ³Όκ° λμμΌ νλ€κ³ μκ°νκΈ° μ½λ€. νμ§λ§ 1μ°¨μ λ°°μ΄μ κ²½μ°μ λͺ
λ°±ν λ€λ₯Έμ μ΄ μλ€. λ°λ‘, 리μ€νΈμ μμκ° λ¦¬μ€νΈλΌλ κ²μ΄λ€. 리μ€νΈλ mutable
κ°μ²΄λ‘μ, resize
μ°μ°μ κ°μ§κ³ μμ΄μ λ³λμ μ‘°μμ ν΄λ κ°μ²΄μ μ£Όμκ°μ΄ λ³κ²½λμ§ μλλ€. λ€μ λ§ν΄ λ©λͺ¨λ¦¬ 볡μ¬κ° λ°μνμ§ μλλ€.
νμ§λ§ 1μ°¨μ λ°°μ΄μ κ²½μ°λ μμκ° immutable
κ°μ²΄μΈ μ μλ€. λ°λΌμ μ΄κΈ°μ λͺ¨λ μμκ° κ°μ μ£Όμλ₯Ό 곡μ νκ³ μμ΄λ, μμ°¨μ μΌλ‘ μ‘°μμ΄ λ°μνλ©΄μ λ©λͺ¨λ¦¬μ μλ‘μ΄ κ°μ΄ 볡μ¬λκ³ μλ‘ λ€λ₯Έ μ£Όμλ₯Ό κ°κ² λκΈ° λλ¬Έμ λ¬Έμ κ° μλ κ²μ΄λ€. μ΄λ¬ν μ°¨μ΄ λλ¬Έμ μ΄μ°¨μ λ°°μ΄μ κ²½μ° λ¦¬μ€νΈ 볡μ¬λ₯Ό μ¬μ©νκ² λλ©΄, λͺ¨λ μμκ° κ°μ μ£Όμλ₯Ό κ³μν΄μ 곡μ νκΈ° λλ¬Έμ λͺ¨λ κ°μ κ°μ κ°κ² λλ€.
# Question 1. memory id
[0, 1]
140226858532160
[0, 2]
140226858532160
[0, 3]
140226858532160
[0, 4]
140226858532160
[0, 5]
140226858532160
# Question 2. memory id
[0, 1]
140226858828416
[0, 1]
140226858785472
[0, 1]
140226858828160
[0, 1]
140226858828480
[0, 1]
140226858830016
κ°λ³ μμμ μμ°¨μ μΌλ‘ μ κ·Όν λ, μμμ μ£Όμλ₯Ό μΆλ ₯ν κ²°κ³Όλ€. Question 1
μ μλ‘ λ€λ₯Έ μΈλ±μ€μ μμμ μ κ·Όν΄λ κ³μν΄μ λμΌν μ£Όμ μμΉλ₯Ό μ°Έμ‘°νκ³ μμμ μ μ μλ€.
ννΈ, Question 2
μ κ²½μ°, μ²μλΆν° μλ‘ λ€λ₯Έ μ£Όμκ°μ κ°λ 리μ€νΈλ₯Ό μμλ‘ ν λΉνκΈ° λλ¬Έμ μλ‘ λ€λ₯Έ μ£Όμκ°μ κ°κ² λλ€.
""" 2. νν μ¬μ© """
tdy, tdx = (-1, 1, 0, 0), (0, 0, -1, 1) # tuple
ldy, ldx = [-1, 1, 0, 0], [0, 0, -1, 1] # list
μ§κΈκΉμ§ μ€λͺ ν λ΄μ©κ³Ό κ°μ λ§₯λ½μμ, λ°°μ΄ λ΄λΆμ ꡬμ±μμμ λ³κ²½μ΄ μλκ² νμ€μ λλ κ²½μ°, λ°°μ΄μ ννλ‘ μ μΈνλ κ²μ΄ μ’λ€. μμ μ μΈλ λ°°μ΄μ κ·Έλν νμ λ¬Έμ μμ μνμ’μ° λ°©ν₯ νμμ ꡬνν λ μμ£Ό μ¬μ©νλ λ°©λ²μ΄λ€. μνμ’μ° λ°©ν₯μ νννλκ² λͺ©μ μ΄λΌμ, ν΄λΉ λ°°μ΄μ λ―Έλμ λ³κ²½λ μΌμ΄ μλ€κ³ 보μ₯ν μ μλ€. μ΄λ° κ²½μ°μλ μ΅κ΄μ μΌλ‘ 리μ€νΈλ₯Ό μ¬μ©νμ§λ§κ³ , ννμ μ°μ.
ννμ΄ λ¦¬μ€νΈλ³΄λ€ λμ μ΄μ λ immutable
κ°μ²΄λΌλ μ μ΄λ€. immutable
κ°μ²΄λ λ³κ²½λμ§ μλλ€λ κ²μ μ μ λ‘ νκΈ° λλ¬Έμ resize
λ©μλκ° κ°μ²΄μ μλ€. μ΄μ λ°λΌμ κ΄λ ¨λ λ©ν μ 보λ μ μ₯νκ³ μμ νμκ° μ¬λΌμ§λ€. κ·Έλμ 리μ€νΈ λ³΄λ€ κ°λ³κ³ λΉ λ₯Έ κ³μ°μ΄ κ°λ₯νλ€. λν ννμ 20μ΄νμ ν¬κΈ°λ₯Ό κ°λ κ°μ²΄λ λνΌλ°μ€ μΉ΄μ΄νΈ
κ° 0μ΄λΌλ Python GC
κ° λ©λͺ¨λ¦¬λ₯Ό νμνμ§ μλλ€. λμ λ©λͺ¨λ¦¬ μμ μ μ₯νκ³ μλ€κ°, κ°μ ν¬κΈ°μ ννμ΄ λ€μ ν λ² μ μΈλ λ, μ΄κ²μ μ¬νμ©νλ€.
리μ€νΈμ ννμ μ 체 μμ μ£ΌκΈ°λ₯Ό λΉκ΅ν΄λ³΄λ©΄, ννμ 컀λ&νλμ¨μ΄ νΈμΆνμκ° λ¦¬μ€νΈλ³΄λ€ ν¨μ¬ μ μ΄μ§λ€. κ·Έλμ μ¬κ΅¬μ±μ΄ νμμλ κ²½μ°λ λ°λμ ννλ‘ μ μΈνλκ² μ΄λμ΄λΌκ³ λ³Ό μ μλ€.
""" λ¬Έμμ΄ ν©μΉκΈ° """
arr1, arr2 = 'I am a boy, ', 'you are a girl'
src = time.time()
result = arr1 + arr2
end = time.time()
print(f"Execution Time: {src-end}")
print(f"Result: {result}")
src = time.time()
result2 = ''.join([arr1, arr2])
end = time.time()
print(f"Execution Time: {src-end}")
print(f"Result: {result2}")
Execution Time: -3.600120544433594e-05
Result: I am a boy, you are a girl
Execution Time: -3.504753112792969e-05
Result: I am a boy, you are a girl
λ¬Έμμ΄μ νμ΄μ¬μμ immutable
κ°μ²΄λ‘ κ°μ£Όνλ€. λ°λΌμ μΌλ° μ°μ°μ(+, *)λ₯Ό μ¬μ©ν΄ λ¬Έμμ΄μ μμ ν κ²½μ°, μ¬ν immutable
κ°μ²΄μ²λΌ μλ‘μ΄ λ©λͺ¨λ¦¬ ν λΉμ΄ λ°μνλ€. μ΄λ₯Ό λ°©μ§νκΈ° μν΄ νμ΄μ¬ λ΄λΆμ μΌλ‘ μ΅μ ν λμ΄ μλ str.join()
μ μ¬μ©ν΄ λ¬Έμμ΄μ μ‘°μνλλ‘ νμ.
Theme 3. μ»΄ν리ν¨μ
/μ λλ μ΄ν°
src = time.time()
arr1 = [i**2 for i in range(100000)] # list comprehension
end = time.time()
print(f"Execution Time: {src-end}")
print(f"Memory Size: {sys.getsizeof(arr1)} byte")
# print(f"Result: {arr1}")
src = time.time()
arr2 = (i**2 for i in range(100000)) # init of generator
end = time.time()
print(f"Execution Time: {src-end}")
print(f"Memory Size: {sys.getsizeof(arr2)} byte")
print(f"Result: {arr2}")
Execution Time: -0.023138046264648438
Memory Size: 800984 byte
Execution Time: -5.2928924560546875e-05
Memory Size: 112 byte
Result: <generator object <genexpr> at 0x1058c3f20>
μλ, νμν λ©λͺ¨λ¦¬ ν¬κΈ° λͺ¨λ μ λλ μ΄ν°κ° μλμ μΌλ‘ ν¨μ¨μ μΈ λͺ¨μ΅μ΄λ€. μ λλ μ΄ν°μ κ²½μ°, μ€μ λ‘λ λͺ¨λ μ°μ°κ°μ κ°κ³ μλκ² μλκΈ° λλ¬Έμ΄λ€. κ·Έλμ μΈλ±μ±, μ¬λΌμ΄μ±λ± νμ΄μ¬ λ°°μ΄μ μ¬λ¬ μ°μ°μ νμ©ν μ μλ€. λ°λΌμ μν©μ λ°λΌμ μ»΄ν리ν¨μ κ³Ό μ λλ μ΄ν°λ₯Ό μ¬μ©νλ©΄ λλ€. λ§μ½ μΈλ±μ±, μ¬λΌμ΄μ± μ°μ°μ²λΌ μΌλΆμ μ κ·Όνλ μ°μ°μ μ΄μ©ν΄μΌ νλ€λ©΄ μ»΄ν리ν¨μ μ, sum()μ²λΌ μ 체 λ°°μ΄ λ¨μ μ°μ° νΉμ λ¨μν μμ°¨μ μΌλ‘ μμ νλ νλμ μ κ·Όν΄ λ¬΄μμΈκ° ν΄μΌ νλ μν©(range() λ±)μ΄λΌλ©΄ μ λλ μ΄ν°λ₯Ό νμ©νμ.
Leave a comment