🐍 Укус ΠΏΠΈΡ‚ΠΎΠ½Π° 🐍
2.56K subscribers
1.01K photos
23 videos
285 links
🐍 Канал ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° языкС Python. ВСматичСскиС ΡƒΡ€ΠΎΠΊΠΈ ΠΈ Π»Π°ΠΉΡ„Ρ…Π°ΠΊΠΈ.

πŸ‘½ Админ - @it_dashka
πŸ”Š ΠšΡƒΠΏΠΈΡ‚ΡŒ Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ: https://telega.in/c/byteofpython

πŸ‘‰ Π§Π°Ρ‚: @abyteofpython
πŸ‘‰ ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ: @byteofpython
Download Telegram
πŸ”₯ Mutable vs Immutable Π² Python

Π’ Python всС Π΄Π°Π½Π½Ρ‹Π΅ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈ ΠΎΠ½ΠΈ дСлятся Π½Π° измСняСмыС (mutable) ΠΈ нСизмСняСмыС (immutable).

πŸ”Ή НСизмСняСмыС (immutable): нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС создания
βœ… int, float, str, tuple, frozenset
x = "hello"
x += " world" # БоздаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π½Π΅ измСняСтся старый


πŸ”Ή Π˜Π·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹Π΅ (mutable): ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π±Π΅Π· создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
βœ… list, dict, set, bytearray
lst = [1, 2, 3]
lst.append(4) # Бписок измСняСтся Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти


⚠️ Π’Π°ΠΆΠ½Ρ‹ΠΉ нюанс

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° измСняСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ измСнСниям:

def modify_list(lst):
lst.append(99) # Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ список!

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 99]


βœ… Π’Ρ‹Π²ΠΎΠ΄:

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ tuple, Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.
β€’ Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны с измСняСмыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
β€’ Если Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ .copy() ΠΈΠ»ΠΈ deepcopy().
↔️ Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ is ΠΈ == Π² Python

πŸ”Ή == (равСнство) провСряСт, Ρ€Π°Π²Π½Ρ‹ Π»ΠΈ значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (значСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅)


πŸ”Ή is (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ) провСряСт, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти:
print(a is b)  # False (Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹)


πŸ”Ή Но для immutable-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int, str, tuple) Python ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ значСния:
x = 256
y = 256
print(x is y) # True (ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)


βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ == для сравнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ is для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти!
❓ Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ new Π² Python ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

ΠœΠ΅Ρ‚ΠΎΠ΄ new ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ экзСмпляра класса ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π² init. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² случаях, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² синглтонах ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ наслСдовании ΠΎΡ‚ нСизмСняСмых Ρ‚ΠΈΠΏΠΎΠ² (int, str, tuple).

βœ… ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

class Singleton:
_instance = None

def new(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().new(cls)
return cls._instance

obj1 = Singleton()
obj2 = Singleton()

print(obj1 is obj2) # True (ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ссылка)


Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ init, new ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ сам процСсс создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ПолСзСн для ограничСния числа экзСмпляров ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нСизмСняСмыми классами.
πŸ”₯ Mutable vs Immutable Π² Python

Π’ Python всС Π΄Π°Π½Π½Ρ‹Π΅ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈ ΠΎΠ½ΠΈ дСлятся Π½Π° измСняСмыС (mutable) ΠΈ нСизмСняСмыС (immutable).

πŸ”Ή НСизмСняСмыС (immutable): нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС создания
βœ… int, float, str, tuple, frozenset
x = "hello"
x += " world" # БоздаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π½Π΅ измСняСтся старый


πŸ”Ή Π˜Π·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹Π΅ (mutable): ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π±Π΅Π· создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
βœ… list, dict, set, bytearray
lst = [1, 2, 3]
lst.append(4) # Бписок измСняСтся Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти


⚠️ Π’Π°ΠΆΠ½Ρ‹ΠΉ нюанс

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° измСняСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ измСнСниям:

def modify_list(lst):
lst.append(99) # Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ список!

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 99]


βœ… Π’Ρ‹Π²ΠΎΠ΄:

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ tuple, Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.
β€’ Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны с измСняСмыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
β€’ Если Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ .copy() ΠΈΠ»ΠΈ deepcopy().
↔️ Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ is ΠΈ == Π² Python

πŸ”Ή == (равСнство) провСряСт, Ρ€Π°Π²Π½Ρ‹ Π»ΠΈ значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (значСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅)


πŸ”Ή is (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ) провСряСт, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти:
print(a is b)  # False (Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹)


πŸ”Ή Но для immutable-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int, str, tuple) Python ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ значСния:
x = 256
y = 256
print(x is y) # True (ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)


βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ == для сравнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ is для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти!
❓ Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ new Π² Python ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

ΠœΠ΅Ρ‚ΠΎΠ΄ new ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ экзСмпляра класса ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π² init. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² случаях, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² синглтонах ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ наслСдовании ΠΎΡ‚ нСизмСняСмых Ρ‚ΠΈΠΏΠΎΠ² (int, str, tuple).

βœ… ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

class Singleton:
_instance = None

def new(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().new(cls)
return cls._instance

obj1 = Singleton()
obj2 = Singleton()

print(obj1 is obj2) # True (ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ссылка)


Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ init, new ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ сам процСсс создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ПолСзСн для ограничСния числа экзСмпляров ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нСизмСняСмыми классами.
πŸ”₯ Mutable vs Immutable Π² Python

Π’ Python всС Π΄Π°Π½Π½Ρ‹Π΅ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈ ΠΎΠ½ΠΈ дСлятся Π½Π° измСняСмыС (mutable) ΠΈ нСизмСняСмыС (immutable).

πŸ”Ή НСизмСняСмыС (immutable): нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС создания
βœ… int, float, str, tuple, frozenset
x = "hello"
x += " world" # БоздаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π½Π΅ измСняСтся старый


πŸ”Ή Π˜Π·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹Π΅ (mutable): ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π±Π΅Π· создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
βœ… list, dict, set, bytearray
lst = [1, 2, 3]
lst.append(4) # Бписок измСняСтся Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти


⚠️ Π’Π°ΠΆΠ½Ρ‹ΠΉ нюанс

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° измСняСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ измСнСниям:

def modify_list(lst):
lst.append(99) # Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ список!

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 99]


βœ… Π’Ρ‹Π²ΠΎΠ΄:

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ tuple, Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.
β€’ Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны с измСняСмыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
β€’ Если Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ .copy() ΠΈΠ»ΠΈ deepcopy().
↔️ Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ is ΠΈ == Π² Python

πŸ”Ή == (равСнство) провСряСт, Ρ€Π°Π²Π½Ρ‹ Π»ΠΈ значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (значСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅)


πŸ”Ή is (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ) провСряСт, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти:
print(a is b)  # False (Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹)


πŸ”Ή Но для immutable-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int, str, tuple) Python ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ значСния:
x = 256
y = 256
print(x is y) # True (ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)


βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ == для сравнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ is для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти!
πŸ‘€ Випизация Π² Python

Python β€” динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык, Π½ΠΎ с вСрсии 3.5+ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ язык статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Π½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ с Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ.

➑️ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

def greet(name: str, times: int) -> str:
return (f"Hello, {name}! " * times).strip()

print(greet("Alice", 2)) # Hello, Alice! Hello, Alice!


Аннотации Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‰Π΅ ΠΈ понятнСС, особСнно Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….
βš™οΈ Python: ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’ Python ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ присваивании значСния. Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… опрСдСляСтся автоматичСски.

βœ”οΈ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹:

β€’ int β€” Ρ†Π΅Π»ΠΎΠ΅ число
β€’ float β€” число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ
β€’ str β€” строка
β€’ bool β€” логичСский Ρ‚ΠΈΠΏ (True ΠΈΠ»ΠΈ False)

➑️ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

age = 25         # int
height = 1.75 # float
name = "Alice" # str
is_active = True # bool

print(type(age), type(name))


☝ Π—Π°ΠΏΠΎΠΌΠ½ΠΈ: Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· type().
❓ Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ mutable ΠΈ immutable Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Python ΠΈ ΠΊΠ°ΠΊ это влияСт Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°?

Π’ Python ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ дСлятся Π½Π° измСняСмыС (mutable) ΠΈ нСизмСняСмыС (immutable). Π­Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ концСпция, которая влияСт Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ коллСкциями.

βœ… ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

def add_item(lst):
lst.append(100)

my_list = [1, 2, 3]
add_item(my_list)
print(my_list) # [1, 2, 3, 100]


πŸ“Œ Бписки β€” это измСняСмый Ρ‚ΠΈΠΏ. Ѐункция ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Если Π±Ρ‹ ΠΌΡ‹ использовали ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (immutable), Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·Π²Π°Π»ΠΎ Π±Ρ‹ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π˜Π·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹: list, dict, set, bytearray
НСизмСняСмыС: int, float, str, tuple, frozenset

⚠️ ПониманиС этой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ:

β€’ Ρ€Π°Π±ΠΎΡ‚Π΅ с функциями (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ ссылкС),
β€’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ бСзопасных API,
β€’ использовании словарСй ΠΈ мноТСств (ΠΊΠ»ΡŽΡ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ immutable).
❀1
πŸ‘©β€πŸ’» dataclasses β€” мСньшС ΠΊΠΎΠ΄Π° для классов с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

ΠœΠΎΠ΄ΡƒΠ»ΡŒ dataclasses позволяСт быстро ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ классы-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· лишнСго шаблонного ΠΊΠΎΠ΄Π°.

➑️ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

from dataclasses import dataclass

@dataclass
class User:
name: str
age: int = 0

u = User("Анна", 25)
print(u) # User(name='Анна', age=25)


πŸ“Œ Π§Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ @dataclass:

β€’ АвтоматичСски создаёт __init__, __repr__, __eq__
β€’ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
β€’ МоТно Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ классС

ИдСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для структурированных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с API, ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°ΠΌΠΈ ΠΈΠ»ΠΈ модСлями
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘©β€πŸ’» dataclass β€” мСньшС ΠΊΠΎΠ΄Π° для классов

@dataclass ΠΈΠ· модуля dataclasses автоматичСски создаёт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ __init__, __repr__, __eq__ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π° основС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ.

➑️ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

from dataclasses import dataclass

@dataclass
class User:
name: str
age: int

u = User("Анна", 25)
print(u) # User(name='Анна', age=25)


πŸ“Œ Π£Π΄ΠΎΠ±Π½ΠΎ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…: мСньшС шаблонного ΠΊΠΎΠ΄Π°, большС читаСмости.
Please open Telegram to view this post
VIEW IN TELEGRAM