Python

[python] ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๋™์ž‘ - ํŠœํ”Œ ํ™œ์šฉ๋ฒ•

hyonie 2024. 5. 6. 14:08


 ํŒŒ์ด์ฌ์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๋™์ž‘ ์›๋ฆฌ๊นŒ์ง€, ํŠนํžˆ ํŠœํ”Œ์˜ ํ™œ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŠœํ”Œ์€ ๋ถˆ๋ณ€(immutable) ํŠน์„ฑ์„ ์ง€๋‹Œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ, ๋ฆฌ์ŠคํŠธ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ธก๋ฉด์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ํŠœํ”Œ์˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•, ๊ธฐ๋ณธ ์—ฐ์‚ฐ, ์ธ๋ฑ์‹ฑ ๋ฐ ์Šฌ๋ผ์ด์‹ฑ, ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ƒ์„ธํžˆ ๋‹ค๋ฃจ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

     


    ํŠœํ”Œ์€ ๋ฌด์—‡์ผ๊นŒ?

    ํŠœํ”Œ์€ ํŒŒ์ด์ฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ๋ฆฌ์ŠคํŠธ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
     

    1. ์ฝ๊ธฐ ์ „์šฉ(Immutable) :  ํŠœํ”Œ์€ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๊ทธ ๊ฐ’์„ ๋ณ€๊ฒฝํ• ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค. ๋ฆฌ์ŠคํŠธ์™€ ๋‹ฌ๋ฆฌ ๊ฐ’์„ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ํ• ์ˆ˜ ์—†๋‹ค.
    2. ๊ด„ํ˜ธ๋กœ ์ƒ์„ฑ: ํŠœํ”Œ์€ ๊ด„ํ˜ธ์ธ () ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 
    3. ๊ด„ํ˜ธ ์ƒ๋žต ๊ฐ€๋Šฅ: ํŠœํ”Œ์€ ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
      tp1 = (1,2,3)
      tp2 = 1,2,3โ€‹
    4. ํ•œ๊ฐœ์˜ ํ•ญ๋ชฉ ํŠœํ”Œ: ํ•œ ๊ฐœ์˜ ํ•ญ๋ชฉ์„ ๊ฐ–๋Š” ํŠœํ”Œ์„ ์ƒ์„ฑํ•  ๋•Œ๋Š” ํ•ญ๋ชฉ ๋’ค์— ์ฝค๋งˆ(,)๋ฅผ ๋ถ™์—ฌ์•ผํ•œ๋‹ค.
      tp1 = (1,)
      tp2 = 1,

     


    ๐Ÿ”„ const์™€ let์˜ ์ฐจ์ด์™€ ํŒŒ์ด์ฌ์˜ ํŠœํ”Œ ๋น„๊ต 

    ํŒŒ์ด์ฌ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ๋Š” ์ฃผ๋กœ const, let ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ฌ๋ฆฌ, = ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ, const๋Š” ์ƒ์ˆ˜๋กœ ์„ ์–ธํ•˜๊ณ , ํ•œ๋ฒˆ ์„ ์–ธ๋œ ๊ฐ’์„ ๋ณ€๊ฒฝํ• ์ˆ˜ ์—†๋‹ค. ํŒŒ์ด์ฌ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ํŠœํ”Œ์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
     

    const์™€ let์˜ ์ดํ•ด

    const์™€ let์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด์ž.

    // JavaScript ์ฝ”๋“œ
    
    let a = 10;
    const b = {name : 'kim', age: 20}
    //const b = Object({name : 'kim', age: 20})

     
     
     let์€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋˜๊ณ , ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด let a = 10;์€ a๋ผ๋Š” ๋ณ€์ˆ˜์— 10์ด๋ผ๋Š” ๊ฐ’์ด ํ• ๋‹น ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ˜๋ฉด์— const๋Š” ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ• ๋•Œ ์‚ฌ์šฉ๋˜๊ณ , ํ•œ๋ฒˆ ํ• ๋‹น๋œ ๊ฐ’์„ ๋ณ€๊ฒฝํ• ์ˆ˜ ์—†๋‹ค. ์ด๋•Œ ๊ฐ์ฒด b๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๊ณ , b์—๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

    # Python์ฝ”๋“œ
    
    my_tuple = (1,2,3)

     
    ์œ„ ์ฝ”๋“œ์—์„œ ํŒŒ์ด์ฌ์˜ ํŠœํ”Œ์€ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ•œ๋ฒˆ ์ƒ์„ฑ๋œ ํŠœํ”Œ์€ ์ˆ˜์ •ํ• ์ˆ˜ ์—†๊ณ , ์—ฌ๋Ÿฌ๊ฐ’์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ• ๋•Œ ์œ ์šฉํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝ const์™€ ์œ ์‚ฌํ•œ ์—ญํ• ์„ํ•œ๋‹ค.
     

    ์›น์—์„œ const ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์™œ ๊ฐ’์ด ๋ณ€๊ฒฝ์ด ๋ ๊นŒ?

     ์›น์—์„œ const๋ฅผ ์‚ฌ์šฉํ–ˆ์Œ์—๋„ ๋ณ€๊ฒฝ๋˜๋Š” ์ด์œ ๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด new ์—ฐ์‚ฐ์ž๊ฐ€ ์ƒ๋žต๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์ด ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ ์ˆ˜ ์—†์ง€๋งŒ ํ•ด๋‹น ๊ฐ์ฒด์˜ ์†์„ฑ ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ ์ˆ˜ ์žˆ๋‹ค.
     
     


     

    ๐Ÿ“Š ํŠœํ”Œ์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ• : ๊ธฐ๋ณธ์ ์ธ ์—ฐ์‚ฐ๊ณผ ์ธ๋ฑ์‹ฑ

    ํŠœํ”Œ์€ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ• ์ˆ˜ ์žˆ๊ณ , ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•ด๋„ ๋œ๋‹ค.

    tp1 = (1,2,3)
    tp2 = 1,2,3
    
    tp3 = (1,)
    tp4 = 1,
    
    print(tp1)  #์ถœ๋ ฅ: (1, 2, 3)
    print(tp2)  #์ถœ๋ ฅ: (1, 2, 3)
    print(tp3)  #์ถœ๋ ฅ: (1,)
    print(tp4)  #์ถœ๋ ฅ: (1,)

     
    ํŠœํ”Œ์˜ ๊ฐ ์š”์†Œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ• ์ˆ˜ ์žˆ๋‹ค.

    print(tp1[1])  #์ถœ๋ ฅ: 2
    print(tp1[0] + tp1[1] + tp1[2])  #์ถœ๋ ฅ: 6

     
    ์Šฌ๋ผ์ด์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠœํ”Œ์˜ ์ผ๋ถ€๋ถ„์„ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๋‹ค.

    #ํŠœํ”Œ์ด๋ฆ„[์‹œ์ž‘์ธ๋ฑ์Šค:๋์ธ๋ฑ์Šค+1]
    print(tp1[1:3])  #์ถœ๋ ฅ: (2, 3)
    print(tp1[1:])   #์ถœ๋ ฅ: (2, 3)
    print(tp1[:3])   #์ถœ๋ ฅ: (1, 2, 3)

     
    ํŠœํ”Œ์€ ๋ง์…ˆ๊ณผ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
     

    print(tp1+tp2)   #์ถœ๋ ฅ: (1, 2, 3, 1, 2, 3)
    print(tp2*3)     #์ถœ๋ ฅ: (1, 2, 3, 1, 2, 3, 1, 2, 3)

     
    ํŠœํ”Œ์€ ๋ฆฌ์ŠคํŠธ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‚ด๋ถ€์˜ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํŠœํ”Œ์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‹ค.
     
     


     

    ๐Ÿง  ํŠœํ”Œ์˜ ๋ถˆ๋ณ€์„ฑ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋™์ž‘

    ํŠœํ”Œ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ const๋ž‘ ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ธฐ์กด์—(1,2,3)์—  ํŠœํ”Œ (4,5,6)์„ ํ•˜๋‚˜ ๋” ์ƒ์„ฑ์„ ํ•ด์„œ a์— ๋Œ€์ž…์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? a๊ฐ€ ํŠœํ”Œ์ด๋‹ˆ๊นŒ const์— ๋Œ€์ž…์„ ํ•˜๋ฉด ์„ฑ๋ฆฝ์ด ์•ˆ๋˜์•ผ ํ•˜๋Š”๋ฐ ์ถœ๋ ฅ์ด๋œ๋‹ค. 4,5,6์ด ์ถœ๋ ฅ๋œ๋‹ค. 

    a = (1,2,3)
    a = (4,5,6)
    
    print(a)  #์ถœ๋ ฅ: (4, 5, 6)
    print(id(a))  #์ถœ๋ ฅ: 1857557131392
    print(id(a),a)  #์ถœ๋ ฅ: 1857557131392 (4, 5, 6)

     
    ํŒŒ์ด์ฌ์—์„œ ๋ณ€์ˆ˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ๋œ๋‹ค.

    a = (1,2,3)
    print(id(a))  #์ถœ๋ ฅ: 1725010833472
    
    a = (4,5,6)
    print(id(a),a)  #์ถœ๋ ฅ: 1725010592640 (4, 5, 6)

    a์—๋Š” (1,2,3) ํŠœํ”Œ์ด ํ• ๋‹น๋˜๊ณ , ๊ทธํ›„ id(a)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•ด๋‹น ํŠœํ”Œ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  a์— (4,5,6) ํŠœํ”Œ์ด ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น๋œ๋‹ค. ์ด๋•Œ ์ด์ „์—  a๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ ํŠœํ”Œ ๊ฐ์ฒด๋Š” ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๊ฒŒ๋˜๊ณ , ์ƒˆ๋กœ์šด ํŠœํ”Œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. ์ด๋กœ์ธํ•ด ๋ณ€์ˆ˜ a๋Š”๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค.
     
    ๋”ฐ๋ผ์„œ id(a)๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ์ƒˆ๋กœ์šด ํŠœํ”Œ ๊ฐ์ฒด (4,5,6)์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.
    ์ด๋Š” ์ด์ „์— ๋ฐ˜ํ™˜๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์™€ ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค.
     

    const์˜ ๊ฐœ๋…์—์„œ ํŠœํ”Œ์€ ์‚ด์ง ๋‹ค๋ฅด๋‹ค?

    let a = {cons name, const age} ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์“ฐ์ž๋ฉด, ์ฃผ์†Œ๊ฐ’์€ ๋ณ€์ˆ˜์ธ๋ฐ ๊ฐ๊ฐ์˜ ๋‚ด๋ถ€๊ฐ€ const์ธ ๊ฒƒ์ด๋‹ค.
    ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— a๊ฐ€ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์— ์žˆ๊ณ , 1,2,3 ๊ทธ๋ฆฌ๊ณ  4,5,6์˜ ์ฃผ์†Œ๊ฐ’์ด ์žˆ๋‹ค๋ฉด a๊ฐ€ 0x100์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ์œ„์— 0x100์˜ ์ฃผ์†Œ๊ฐ’์ด ๋Š์–ด์ง€๊ณ  ์•„๋ž˜ 4,5,6์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.
    const ์ด๊ธฐ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์ด ์•ˆ๋œ๋‹ค.  ๋”ฐ๋ผ์„œ a[0] = 40๊ณผ ๊ฐ™์ด ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํŠœํ”Œ์€ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ๋–„๋ฌธ์ด๋‹ค. ๋ณ€์ˆ˜ a์˜ ๋‚ด๋ถ€์š”์†Œ๋Š” ์ƒ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋ถˆ๋ณ€ํ•˜๋‹ค.