Найти - Пользователи
Полная версия: ограничение встроено в Питон или из-за железа?
Начало » Python для новичков » ограничение встроено в Питон или из-за железа?
1 2 3
pytol
Ferroman
Если вам надо хранить столько строк, то держать их в оперативной памяти, мммм, не лучшее решение.
Используйте внешние носители.
да, например, сгенерить файл со строками и поместить его на жесткий диск, так?
пусть теперь строки разной длины, если я хочу пару строк сконкатенировать и потом во всем списке поискать нет ли совпадения с уже имеющейся строкой, то питон как будет действовать (без размещения всего списка в ОЗУ)? подгружать файл частями?! наверное это несложно …

но хотелось бы в динамике - вот не хранит же питон таблицу умножения вплоть до гугол в степени 100, а 11 в степени 100 и еще в степени 100 практически мгновенно выдает на экран (на 4 страницах А4)… почему же со строками так…
pytol
все к тому же… генератор списков (где то сказано) эквивалентен коду с циклами, так ли это?
вот выдает для z - false а для t - true то есть значения совпадают а средства неэквивалентные все же? что эффективнее? - это к строкам ….
g=[x+y for x in 'ab' for y in 'ab']

h=[]
for x in 'ab':
for y in 'ab':
h.append(x+y)


z= (g is h)
t= (g == h)
print "z="+`z` + " t= "+`t`
Ed
pytol
все к тому же… генератор списков (где то сказано) эквивалентен коду с циклами, так ли это?
вот выдает для z - false а для t - true то есть значения совпадают а средства неэквивалентные все же?
Не средства неэквивалентные, а объекты h и g разные. Так они разные по-любому будут. вот, смотрите:
>>> h = []
>>> g = []
>>> print g is h, g == h
False True
Ferroman
да, например, сгенерить файл со строками и поместить его на жесткий диск, так?
пусть теперь строки разной длины, если я хочу пару строк сконкатенировать и потом во всем списке поискать нет ли совпадения с уже имеющейся строкой, то питон как будет действовать (без размещения всего списка в ОЗУ)? подгружать файл частями?! наверное это несложно …
База данных. Можно, а может даже лучше, нереляционную - Berkeley DB например.
но хотелось бы в динамике - вот не хранит же питон таблицу умножения вплоть до гугол в степени 100, а 11 в степени 100 и еще в степени 100 практически мгновенно выдает на экран (на 4 страницах А4)… почему же со строками так…
Потому что число, даже такое большое, не занимает столько памяти. А в строках каждый символ - минимум байт. 4,5 млрд строк, даже по 1 символу символов будет занимать 4 терабайта. Очевидно, что никакой оперативной памяти не хватит. Мало того - для нормальной обработки такого количества данных стоит кластер мастерить.

Я бы ещё раз посоветовал пересмотреть подход к задаче вообще. Может есть математическое решение, не требующее такого количества ресурсов, или, как минимум сильно его уменьшая.
Делитесь задачей - может что-то придумаем.
pytol
Ed
Не средства неэквивалентные, а объекты h и g разные. Так они разные по-любому будут. вот, смотрите:
>>> h =
>>> g =
>>> print g is h, g == h
False True
здорово отмечено!

тогда вопрос уточняем - да, как объекты они разные, но чтобы быть эквивалентными, они ДОЛЖНЫ уж точно генерить один и тот же байт код!?
готовим два файла, один со строкой генератора списка, другой с кодом “эквивалентного” ему цикла… потом применяем команду
import py_compile
py_compile.comoile("первый файл")
py_compile.compile("второй файл")
потом полученные файлики с расширением .pyc - смотрим WinHex - и видим
начинаются они одинаково, но!!!
по слухам более эффективная строка генератора занимает 0х196 байт, а цикл - 0х176 байт!!!

что же все-таки нет эквивалентности этих приемов программирования… !!!???
(как то в питоне можно еще смотреть время выполнения модуля….)

если нет , то в упомянутой книге нас стр.145 ошибка - когда автор утверждает эту эквивалентность…

вопрос остался - есть или нет эквивалентность?
pytol
Ferroman
База данных. Можно, а может даже лучше, нереляционную - Berkeley DB например.

——————————————————————–
но хотелось бы в динамике - вот не хранит же питон таблицу умножения вплоть до гугол в степени 100, а 11 в степени 100 и еще в степени 100 практически мгновенно выдает на экран (на 4 страницах А4)… почему же со строками так…
———————————————————————————–
Потому что число, даже такое большое, не занимает столько памяти. А в строках каждый символ - минимум байт. 4,5 млрд строк, даже по 1 символу символов будет занимать 4 терабайта. Очевидно, что никакой оперативной памяти не хватит. Мало того - для нормальной обработки такого количества данных стоит кластер мастерить.
Большое спасибо, вы как раз нашли мою оплошность, из-за которой возникли вопросы! Я то думал (точнее - не подумал!) мегабайты а 10 в 9-й точно терабайты… куда уж на жесткий диск такое…!!!

Что по числам, то они занимают в памяти больше, чем сиволы, если они больше 256… (тип char = 1 байту …) …
я наверное неудачно выразился - когда питон выдает на гора число 11 в степени 10000 он сохраняет именно 10000 символов для вывода на экран, а все числа меньшие этого его не интересуют, в отличие от моих строк…, поэтому приведенное мной неадекватно…
вообще говоря стоит уточнить, что в компьютере чисел нет вообще, тут только строки из двух символов 0 и 1 , которые изначально (как состояния ячеек памяти реализованных, напр., триггерами) НЕ ЕСТЬ ЧИСЛА - умножать, складывать, раскрывать скобки с состояними ячеек памяти изначально нелепо (так же как мои буквы а и b )…

что касается задачи, то она в том чтобы пощупать что сильнее Математика Вольфрама или Питон, поэтому и смотрю предельные возможности Питона. А Математику Вольфрама (если Питон “победит”) тогда можно как интерфейс для Питона использовать (согласовав их )
pytol
slivlen
pytol написал:
—————————————————————–
отсается вопрос - какими инструментами проследить
———————————————————————–
Для начала попробуй отследить системными средствами объем занятой/свободной оперативки и свопа перед моментом ошибки.
диспетчер задач Винды кое что показывает…. но я бы хотел освоить те средства, что есть для этого в Питоне,
какими Питоновыми средствами надо воспользоваться для этого вопроса?
pytol
Ferroman
Я бы ещё раз посоветовал пересмотреть подход к задаче вообще. Может есть математическое решение, не требующее такого количества ресурсов, или, как минимум сильно его уменьшая.
Делитесь задачей - может что-то придумаем.
думаю что не ошибусь - на форуме два типа вопросов - как решить конкретную задачу (которую и не в питоне часто можно сделать) и второй - вопросы о самом Питоне, каковы его возможности, как он устроен и т.п. - вот мои вопросы относятся ко второму типу! Это тоже очень важные вопросы…
Александр Кошелев
pytol
все к тому же… генератор списков (где то сказано) эквивалентен коду с циклами, так ли это?
да
pytol
что же все-таки нет эквивалентности этих приемов программирования… !!!???
они эквиваленты с точки зрения результата, который продуцируют.
pytol
Daevaorn
они эквиваленты с точки зрения результата, который продуцируют.
вопрос в том, что ТАК понимаемой эквивалентности недостаточно, одинаковый результат могут давать два алгорифма один затратный (плохой , длинный, глупый и т.п.), а другой быстрый и “дешевый”,
к тому же, когда есть два разных алгорифма (дающие в случае Питона разный байт-код) то крайне сложно доказать, что они в вашем смысле эквивалентны , а может на каких-нибудь данных они дадут разный результат, вы же не можете перебрать все виды входных данных… , так что ваше “да” - только предположение, мне кажется, что скорее всего в вашем смысле эти конструкции неэквивалентны где то дают разные резултаты - для уточнения надо смотреть грамматику и во что код на Питоне превращает интерпретатор…
В книжке Лессы нашел на стр. 64 ("Разработка Веб приложений на Питон 2001 г.) так прямо написано, что генератор более эффективная конструкция… гм..
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB