#оптимізація — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #оптимізація, aggregated by home.social.
-
CW: Оптимізація Python класів
Створимо простенький клас з двома полями цілих чисел.
class A: x: int y: int def __init__(self, x, y): self.x, self.y = x, yТепер перевіримо його розмір
>>> import sys >>> sys.getsizeof(A) 1712 >>> sys.getsizeof(A(3,4)) 48getsizeofповертає значення у байтах.А тепер клас B з тими ж полями, але з додатковою вказівкою.
class B: x: int y: int __slots__ = ("x", "y") def __init__(self, x, y): self.x, self.y = x, y >>> sys.getsizeof(B) 944 >>> sys.getsizeof(B(3,4)) 48Тепер можемо порівняти розміри цих класів
>>> sys.getsizeof(A) - sys.getsizeof(B) 768Клас B менший за A на 768 байтів через те що клас B не має атрибута
__dict__.#python #class #slots #оптимізація #класи #пам'ять
-
CW: Оптимізація Python класів
Створимо простенький клас з двома полями цілих чисел.
class A: x: int y: int def __init__(self, x, y): self.x, self.y = x, yТепер перевіримо його розмір
>>> import sys >>> sys.getsizeof(A) 1712 >>> sys.getsizeof(A(3,4)) 48getsizeofповертає значення у байтах.А тепер клас B з тими ж полями, але з додатковою вказівкою.
class B: x: int y: int __slots__ = ("x", "y") def __init__(self, x, y): self.x, self.y = x, y >>> sys.getsizeof(B) 944 >>> sys.getsizeof(B(3,4)) 48Тепер можемо порівняти розміри цих класів
>>> sys.getsizeof(A) - sys.getsizeof(B) 768Клас B менший за A на 768 байтів через те що клас B не має атрибута
__dict__.#python #class #slots #оптимізація #класи #пам'ять
-
CW: Оптимізація Python класів
Створимо простенький клас з двома полями цілих чисел.
class A: x: int y: int def __init__(self, x, y): self.x, self.y = x, yТепер перевіримо його розмір
>>> import sys >>> sys.getsizeof(A) 1712 >>> sys.getsizeof(A(3,4)) 48getsizeofповертає значення у байтах.А тепер клас B з тими ж полями, але з додатковою вказівкою.
class B: x: int y: int __slots__ = ("x", "y") def __init__(self, x, y): self.x, self.y = x, y >>> sys.getsizeof(B) 944 >>> sys.getsizeof(B(3,4)) 48Тепер можемо порівняти розміри цих класів
>>> sys.getsizeof(A) - sys.getsizeof(B) 768Клас B менший за A на 768 байтів через те що клас B не має атрибута
__dict__.#python #class #slots #оптимізація #класи #пам'ять
-
CW: Оптимізація Python класів
Створимо простенький клас з двома полями цілих чисел.
class A: x: int y: int def __init__(self, x, y): self.x, self.y = x, yТепер перевіримо його розмір
>>> import sys >>> sys.getsizeof(A) 1712 >>> sys.getsizeof(A(3,4)) 48getsizeofповертає значення у байтах.А тепер клас B з тими ж полями, але з додатковою вказівкою.
class B: x: int y: int __slots__ = ("x", "y") def __init__(self, x, y): self.x, self.y = x, y >>> sys.getsizeof(B) 944 >>> sys.getsizeof(B(3,4)) 48Тепер можемо порівняти розміри цих класів
>>> sys.getsizeof(A) - sys.getsizeof(B) 768Клас B менший за A на 768 байтів через те що клас B не має атрибута
__dict__.#python #class #slots #оптимізація #класи #пам'ять
-
CW: Оптимізація Python класів
Створимо простенький клас з двома полями цілих чисел.
class A: x: int y: int def __init__(self, x, y): self.x, self.y = x, yТепер перевіримо його розмір
>>> import sys >>> sys.getsizeof(A) 1712 >>> sys.getsizeof(A(3,4)) 48getsizeofповертає значення у байтах.А тепер клас B з тими ж полями, але з додатковою вказівкою.
class B: x: int y: int __slots__ = ("x", "y") def __init__(self, x, y): self.x, self.y = x, y >>> sys.getsizeof(B) 944 >>> sys.getsizeof(B(3,4)) 48Тепер можемо порівняти розміри цих класів
>>> sys.getsizeof(A) - sys.getsizeof(B) 768Клас B менший за A на 768 байтів через те що клас B не має атрибута
__dict__.#python #class #slots #оптимізація #класи #пам'ять
-
Як же мене після
C++навіть наPythonтягне оптимізувати там де ніхто не звертає уваги. До прикладу багато хто використовує всюди списки дам де це не потрібно і можна взяти кортеж.Обʼєкт типу
objectзаймає16 BYTES. Це можна дізнатись викликавши метод__sizeof__в обʼєкта.o = object() o.__sizeof__()Від цього типу наслідуються всі інші стандартні й не тільки типи навіть якщо явно цього не вказано. Тому це найменший можливий розмір будь-якого обʼєкта. Перевірити це можна за допомоги функції
issubclassяка приймає два типи та повертає значення типуbool.>>> issubclass(int, object) True >>> issubclass(float, object) True >>> issubclass(bool, object) True >>> issubclass(str, object) True >>> issubclass(list, object) True >>> issubclass(tuple, object) True >>> class A: ... pass ... >>> issubclass(A, object) TrueСаме через це всі обʼєкти мають функцію
__sizeof__і не тільки.Якщо ми подивимось на розміри стандартних типів, то можемо трохи здивуватись.
>>> int().__sizeof__() 28 >>> float().__sizeof__() 24 >>> bool().__sizeof__() 28 >>> str().__sizeof__() 49 >>> tuple().__sizeof__() 24 >>> list().__sizeof__() 40 >>> set().__sizeof__() 200 >>> dict().__sizeof__() 48Найбільше я здивувався розміру типу
bool. Він займає скільки ж як іint, і є більшим заfloatтаtuple. І це все розміри порожніх (нульових) обʼєктів.Тепер порівняємо кортежі та списками з однаковим вмістом.
>>> t = (1,2,3,4,5,6) >>> l = [1,2,3,4,5,6] >>> t.__sizeof__() 72 >>> l.__sizeof__() 88Різниця та ж що й при порожніх контейнерах через те що контейнер зберігає тільки посилання на обʼєкт. Можемо в цьому переконатись за id обʼєктів.
>>> id(t[0]) == id(l[0]) True >>> t[0] is l[0] TrueОператор
isробить те саме, він порівнює ідентифікатори.Це добре що
pythonоптимізує програму не створюючи зайвих обʼєктів, але всеодно всі обʼєкти займають дуже багато місця. Саме через це я й ненавиджу такі мови якpython,js...#програмування #python #sizeof #розміри #типи #int #float #list #tuple #списки #кортежі #sizeof #object #оптимізація #бісить
-
Як же мене після
C++навіть наPythonтягне оптимізувати там де ніхто не звертає уваги. До прикладу багато хто використовує всюди списки дам де це не потрібно і можна взяти кортеж.Обʼєкт типу
objectзаймає16 BYTES. Це можна дізнатись викликавши метод__sizeof__в обʼєкта.o = object() o.__sizeof__()Від цього типу наслідуються всі інші стандартні й не тільки типи навіть якщо явно цього не вказано. Тому це найменший можливий розмір будь-якого обʼєкта. Перевірити це можна за допомоги функції
issubclassяка приймає два типи та повертає значення типуbool.>>> issubclass(int, object) True >>> issubclass(float, object) True >>> issubclass(bool, object) True >>> issubclass(str, object) True >>> issubclass(list, object) True >>> issubclass(tuple, object) True >>> class A: ... pass ... >>> issubclass(A, object) TrueСаме через це всі обʼєкти мають функцію
__sizeof__і не тільки.Якщо ми подивимось на розміри стандартних типів, то можемо трохи здивуватись.
>>> int().__sizeof__() 28 >>> float().__sizeof__() 24 >>> bool().__sizeof__() 28 >>> str().__sizeof__() 49 >>> tuple().__sizeof__() 24 >>> list().__sizeof__() 40 >>> set().__sizeof__() 200 >>> dict().__sizeof__() 48Найбільше я здивувався розміру типу
bool. Він займає скільки ж як іint, і є більшим заfloatтаtuple. І це все розміри порожніх (нульових) обʼєктів.Тепер порівняємо кортежі та списками з однаковим вмістом.
>>> t = (1,2,3,4,5,6) >>> l = [1,2,3,4,5,6] >>> t.__sizeof__() 72 >>> l.__sizeof__() 88Різниця та ж що й при порожніх контейнерах через те що контейнер зберігає тільки посилання на обʼєкт. Можемо в цьому переконатись за id обʼєктів.
>>> id(t[0]) == id(l[0]) True >>> t[0] is l[0] TrueОператор
isробить те саме, він порівнює ідентифікатори.Це добре що
pythonоптимізує програму не створюючи зайвих обʼєктів, але всеодно всі обʼєкти займають дуже багато місця. Саме через це я й ненавиджу такі мови якpython,js...#програмування #python #sizeof #розміри #типи #int #float #list #tuple #списки #кортежі #sizeof #object #оптимізація #бісить
-
Як же мене після
C++навіть наPythonтягне оптимізувати там де ніхто не звертає уваги. До прикладу багато хто використовує всюди списки дам де це не потрібно і можна взяти кортеж.Обʼєкт типу
objectзаймає16 BYTES. Це можна дізнатись викликавши метод__sizeof__в обʼєкта.o = object() o.__sizeof__()Від цього типу наслідуються всі інші стандартні й не тільки типи навіть якщо явно цього не вказано. Тому це найменший можливий розмір будь-якого обʼєкта. Перевірити це можна за допомоги функції
issubclassяка приймає два типи та повертає значення типуbool.>>> issubclass(int, object) True >>> issubclass(float, object) True >>> issubclass(bool, object) True >>> issubclass(str, object) True >>> issubclass(list, object) True >>> issubclass(tuple, object) True >>> class A: ... pass ... >>> issubclass(A, object) TrueСаме через це всі обʼєкти мають функцію
__sizeof__і не тільки.Якщо ми подивимось на розміри стандартних типів, то можемо трохи здивуватись.
>>> int().__sizeof__() 28 >>> float().__sizeof__() 24 >>> bool().__sizeof__() 28 >>> str().__sizeof__() 49 >>> tuple().__sizeof__() 24 >>> list().__sizeof__() 40 >>> set().__sizeof__() 200 >>> dict().__sizeof__() 48Найбільше я здивувався розміру типу
bool. Він займає скільки ж як іint, і є більшим заfloatтаtuple. І це все розміри порожніх (нульових) обʼєктів.Тепер порівняємо кортежі та списками з однаковим вмістом.
>>> t = (1,2,3,4,5,6) >>> l = [1,2,3,4,5,6] >>> t.__sizeof__() 72 >>> l.__sizeof__() 88Різниця та ж що й при порожніх контейнерах через те що контейнер зберігає тільки посилання на обʼєкт. Можемо в цьому переконатись за id обʼєктів.
>>> id(t[0]) == id(l[0]) True >>> t[0] is l[0] TrueОператор
isробить те саме, він порівнює ідентифікатори.Це добре що
pythonоптимізує програму не створюючи зайвих обʼєктів, але всеодно всі обʼєкти займають дуже багато місця. Саме через це я й ненавиджу такі мови якpython,js...#програмування #python #sizeof #розміри #типи #int #float #list #tuple #списки #кортежі #sizeof #object #оптимізація #бісить
-
Як же мене після
C++навіть наPythonтягне оптимізувати там де ніхто не звертає уваги. До прикладу багато хто використовує всюди списки дам де це не потрібно і можна взяти кортеж.Обʼєкт типу
objectзаймає16 BYTES. Це можна дізнатись викликавши метод__sizeof__в обʼєкта.o = object() o.__sizeof__()Від цього типу наслідуються всі інші стандартні й не тільки типи навіть якщо явно цього не вказано. Тому це найменший можливий розмір будь-якого обʼєкта. Перевірити це можна за допомоги функції
issubclassяка приймає два типи та повертає значення типуbool.>>> issubclass(int, object) True >>> issubclass(float, object) True >>> issubclass(bool, object) True >>> issubclass(str, object) True >>> issubclass(list, object) True >>> issubclass(tuple, object) True >>> class A: ... pass ... >>> issubclass(A, object) TrueСаме через це всі обʼєкти мають функцію
__sizeof__і не тільки.Якщо ми подивимось на розміри стандартних типів, то можемо трохи здивуватись.
>>> int().__sizeof__() 28 >>> float().__sizeof__() 24 >>> bool().__sizeof__() 28 >>> str().__sizeof__() 49 >>> tuple().__sizeof__() 24 >>> list().__sizeof__() 40 >>> set().__sizeof__() 200 >>> dict().__sizeof__() 48Найбільше я здивувався розміру типу
bool. Він займає скільки ж як іint, і є більшим заfloatтаtuple. І це все розміри порожніх (нульових) обʼєктів.Тепер порівняємо кортежі та списками з однаковим вмістом.
>>> t = (1,2,3,4,5,6) >>> l = [1,2,3,4,5,6] >>> t.__sizeof__() 72 >>> l.__sizeof__() 88Різниця та ж що й при порожніх контейнерах через те що контейнер зберігає тільки посилання на обʼєкт. Можемо в цьому переконатись за id обʼєктів.
>>> id(t[0]) == id(l[0]) True >>> t[0] is l[0] TrueОператор
isробить те саме, він порівнює ідентифікатори.Це добре що
pythonоптимізує програму не створюючи зайвих обʼєктів, але всеодно всі обʼєкти займають дуже багато місця. Саме через це я й ненавиджу такі мови якpython,js...#програмування #python #sizeof #розміри #типи #int #float #list #tuple #списки #кортежі #sizeof #object #оптимізація #бісить
-
Як же мене після
C++навіть наPythonтягне оптимізувати там де ніхто не звертає уваги. До прикладу багато хто використовує всюди списки дам де це не потрібно і можна взяти кортеж.Обʼєкт типу
objectзаймає16 BYTES. Це можна дізнатись викликавши метод__sizeof__в обʼєкта.o = object() o.__sizeof__()Від цього типу наслідуються всі інші стандартні й не тільки типи навіть якщо явно цього не вказано. Тому це найменший можливий розмір будь-якого обʼєкта. Перевірити це можна за допомоги функції
issubclassяка приймає два типи та повертає значення типуbool.>>> issubclass(int, object) True >>> issubclass(float, object) True >>> issubclass(bool, object) True >>> issubclass(str, object) True >>> issubclass(list, object) True >>> issubclass(tuple, object) True >>> class A: ... pass ... >>> issubclass(A, object) TrueСаме через це всі обʼєкти мають функцію
__sizeof__і не тільки.Якщо ми подивимось на розміри стандартних типів, то можемо трохи здивуватись.
>>> int().__sizeof__() 28 >>> float().__sizeof__() 24 >>> bool().__sizeof__() 28 >>> str().__sizeof__() 49 >>> tuple().__sizeof__() 24 >>> list().__sizeof__() 40 >>> set().__sizeof__() 200 >>> dict().__sizeof__() 48Найбільше я здивувався розміру типу
bool. Він займає скільки ж як іint, і є більшим заfloatтаtuple. І це все розміри порожніх (нульових) обʼєктів.Тепер порівняємо кортежі та списками з однаковим вмістом.
>>> t = (1,2,3,4,5,6) >>> l = [1,2,3,4,5,6] >>> t.__sizeof__() 72 >>> l.__sizeof__() 88Різниця та ж що й при порожніх контейнерах через те що контейнер зберігає тільки посилання на обʼєкт. Можемо в цьому переконатись за id обʼєктів.
>>> id(t[0]) == id(l[0]) True >>> t[0] is l[0] TrueОператор
isробить те саме, він порівнює ідентифікатори.Це добре що
pythonоптимізує програму не створюючи зайвих обʼєктів, але всеодно всі обʼєкти займають дуже багато місця. Саме через це я й ненавиджу такі мови якpython,js...#програмування #python #sizeof #розміри #типи #int #float #list #tuple #списки #кортежі #sizeof #object #оптимізація #бісить
-
Хотів би ще трохи уточнити чому немає різниці в часі виконання програми на
Go, і наC++. Для отримання часу виконання програми ми можемо використати, вбудовану в оболонку, командуtime`. І з її виводу ми можемо замітити що більшість часу виконання належить до виконання системи, тобто системним викликам. #cpp #go #time #runtime #sof #sizeof #оптимізація #пришвидшення #час #виконання -
Хотів би ще трохи уточнити чому немає різниці в часі виконання програми на
Go, і наC++. Для отримання часу виконання програми ми можемо використати, вбудовану в оболонку, командуtime`. І з її виводу ми можемо замітити що більшість часу виконання належить до виконання системи, тобто системним викликам. #cpp #go #time #runtime #sof #sizeof #оптимізація #пришвидшення #час #виконання -
Раніше я вже розповідав про скрипт
sizeofі його оптимізацію за допомоги переписування зpythonнаGo. Також там я згадував про проблеми з реалізацією наC++. У ній виникали проблеми з каталогами монтування файлових систем. Після того як рішення було знайдено я порівняв швидкість виконання і замітив що її практично немає, але є різниця у розмірі бінарного файлу. Реалізація наGo, у режимі збірки реліз, займає1,4 MiB, а наC++, також у релізі,427,0 KiB. Різниця приблизно у три рази менше.Після цього я вирішив порівняти старі програми з пакунка
coreutilsі їхні сучасні альтернативи. Через те що тут не працюють markdown таблиці я вставлю її як зображення.Серед цих програм середнє значення множника є
23. Розмір встановленого пакункаcoreutilsдорівнює16 MiB. У ньому є 103 бінарники і їхній сумарний розмір дорівнює5.001 MiB. Якщо ми помножимо це на середній множник, тільки бінарники будуть займати115 MiB. І це все тільки на прикладі одного пакунка, а що було б якби більшість програм були так зроблені?#c #c++ #cpp #go #golang #rusr #rs #coreutils #sizeof #sof #оптимізація #реалізація #ls #lsd #cat #bat #find #fd
-
Раніше я вже розповідав про скрипт
sizeofі його оптимізацію за допомоги переписування зpythonнаGo. Також там я згадував про проблеми з реалізацією наC++. У ній виникали проблеми з каталогами монтування файлових систем. Після того як рішення було знайдено я порівняв швидкість виконання і замітив що її практично немає, але є різниця у розмірі бінарного файлу. Реалізація наGo, у режимі збірки реліз, займає1,4 MiB, а наC++, також у релізі,427,0 KiB. Різниця приблизно у три рази менше.Після цього я вирішив порівняти старі програми з пакунка
coreutilsі їхні сучасні альтернативи. Через те що тут не працюють markdown таблиці я вставлю її як зображення.Серед цих програм середнє значення множника є
23. Розмір встановленого пакункаcoreutilsдорівнює16 MiB. У ньому є 103 бінарники і їхній сумарний розмір дорівнює5.001 MiB. Якщо ми помножимо це на середній множник, тільки бінарники будуть займати115 MiB. І це все тільки на прикладі одного пакунка, а що було б якби більшість програм були так зроблені?#c #c++ #cpp #go #golang #rusr #rs #coreutils #sizeof #sof #оптимізація #реалізація #ls #lsd #cat #bat #find #fd