32 비트 Python에 비해 64 비트 Python의 장점은 무엇입니까?


최상의 답변

** 먼저 ** :

64 비트 Python은 64 비트 시스템에만 설치할 수 있으며 64 비트 컴퓨터에만 설치할 수 있습니다.

** 두 번째 : **

컴퓨터 / 프로그램이 n 비트라고 말하는 것은 “n 크기의 변수를 사용한다는 의미가 아닙니다. 최대 2 ^ n 개의 메모리 청크 (일반적으로 바이트)를 처리 할 수 ​​있습니다. 이것이 Windows XP 또는 다른 32 비트 운영 체제에서 약 3,5GB 이상의 램을 사용할 수없는 이유입니다. 계산해 보겠습니다. 2 ^ 32 바이트까지 주소를 지정할 수 있습니다. 2 ^ 32 = 4294967296 [바이트] = 4096 [MB] = 4 [GB]. 보시다시피 이론적으로 시스템은 최대 4GB의 램을 처리해야합니다. 약 0.5 [GB]의이 “누락 된”부분은 PCI (AGP, USB 등) 장치 메모리 주소 지정에 사용됩니다. 64 비트 시스템을 사용하면 최대 16777216 [TB]의 메모리를 처리 할 수 ​​있습니다. 멋지죠?

** tl; dr **

프로그램은 파이썬은 (이상적으로는) 4 [GB]의 메모리를 사용할 수 있습니다. 이것은 보통 충분하지만 때때로 문제를 일으킬 수 있습니다. 반면에 64 비트 파이썬 인스턴스 (프로그램도 함께 실행 됨)는 무제한 * 메모리 양을 처리하고 사용할 수 있습니다. 그러나 다시 Adam Jorgensen의 대답에 따르면 32 비트 및 64 비트에서 실행되는 동일한 프로그램 파이썬은 약 4 [GB] 미만인 한 동일한 양의 메모리를 사용합니다. 64 비트에서는 느리지 않습니다. 파이썬도 마찬가지입니다.

* 전적으로 사실이 아닙니다. “만약 당신이 관심을 갖고 있다면 두 번째 일을보십시오.

도움이 되길 바랍니다. 🙂

답변

귀하의 질문은 무슨 일이 일어나고 있는지에 대한 이해가 부족하다는 것을 보여 주므로이 모든 것에 대해 자세히 이야기 할 시간을 가지겠습니다.

첫 번째 줄에 for loop in range(1, 11).라고 씁니다. loop라는 이름은 전혀 의미가 없습니다. 전체 구성은 하나의 루프입니다. 즉, 1부터 10까지의 숫자를 한 번만 반복합니다. 작성한 내용은 마치 10 번 반복하는 것처럼 보이지만 사실이 아닙니다. 따라서 코드는 정확하지만 변수 이름은 이해가 부족함을 나타냅니다. 무슨 일이 일어나고 있는지.

for number in range(1, 11):

print(number)

이 두 줄의 코드가 모두 for loop입니다. 하나는 for loop입니다.

동의합니다. ” 여러 가지 이유로 while 루프로 달성하고자하는 것을 이해합니다. 첫째, 모든 숫자를 반복하고 사용자에게 각 숫자 다음에 루프를 벗어날 수있는 옵션을 제공하려면 for 루프로 간단히 수행 할 수 있습니다.

for number in range(1, 11):

print(number)

user\_input = input("Do you want to break? (Y/N)")

if user\_input.lower().startswith("y"): #allow for variations and upper/lower case

break

range(1, 11)의 인쇄를 list()로 래핑하여 수정할 수 있지만 여전히 원하는대로 보이지 않습니다. 나는 당신이 for 루프에서와 같은 일, 즉 각 숫자를 인쇄하기를 원한다고 가정하지만, 각 숫자 다음에 루프에서 벗어날 수있는 옵션을 제공합니다. 왜 그렇지 않으면 동일한 것을 반복해서 인쇄하기 위해 루프가 있습니까? 다시?

for 루프를 사용하지 않으려면 다음과 같이 사용할 수 있습니다.

current = 1

while True:

print(current)

current += 1

user\_input = input("Do you want to break? (Y/N)")

if user\_input.lower().startswith("y") or current == 10:

break

또는

numbers = iter(range(1, 11))

while True:

current = next(numbers)

print(current)

user\_input = input("Do you want to break? (Y/N)")

if user\_input.lower().startswith("y") or current == 10: #avoid StopIteration

break

iter. range(1, 11) 반복자 아닙니다 . 반복 가능 : 반복자 를 생성 할 수있는 개체를 의미합니다. 이것은 매우 미묘하지만 중요한 차이점입니다. list는 반복 가능하지만 반복자는 아닙니다. 반복자는 상태를 보유합니다. 즉, 다음에 생성 할 값을 기억합니다. 목록으로는 할 수 없지만 목록을 반복자로 바꿀 수는 있습니다.

예 :

>>> my\_list = [1, 2, 3, 4, 5]

>>> my\_list\_iterator = iter(my\_list)

>>> first\_value = next(my\_list\_iterator)

>>>

>>> first\_value

1

>>> second\_value = next(my\_list\_iterator)

>>> second\_value

2

>>> type(my\_list)

>>> type(my\_list\_iterator)

“내부 “에서 어떻게 작동하는지 알고 싶다면 다음 예를 살펴 보겠습니다.

>>> class Counter:

... def \_\_init\_\_(self, start=1):

... self.current = start

... def \_\_next\_\_(self):

... value = self.current

... self.current += 1

... return value

... def \_\_iter\_\_(self):

... return self

...

>>> my\_counter = Counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

my\_counter는 상태를 유지하므로 반복자 입니다 (즉, 현재 위치를 기억함). 특히 \_\_next\_\_() 메서드가 정의되어 있습니다. 언제든지 다음 값을 생성 할 수 있습니다. 또한 \_\_iter\_\_( )가 있으므로 반복 가능 입니다. 방법이 정의되었습니다.

생성기는 값을 느리게 생성하는 반복기입니다. 예를 들면 다음과 같습니다.

def counter(current=1):

while True:

yield current

current += 1

예, 생성기는 상태를 갖습니다.

>>> my\_counter = counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

지금 흥미로운 점은 range 아님 이라는 것입니다. > generator , 대중적인 믿음과는 반대로. range 반복 가능 이지만 반복자

는 아닙니다. span>이므로 확실히 생성기 가 아닙니다. 성가신 것처럼 보일 수 있지만 여기에는 몇 가지 좋은 이유가 있습니다 (start, stop 및 , 불변성 (변경할 수 없음, 상태를 유지하려면 변경 가능해야 함)) 물론 range를 생성기 :

>>> def my\_range\_generator(start, stop, step=1):

... current = start

... while current < stop:

... yield current

... current += step

...

>>> test\_range = my\_range\_generator(1, 11, 2)

>>> list(test\_range)

[1, 3, 5, 7, 9]

문제를 단순히 고치는 것이 아니라 이해하기 시작하기에 충분한 배경 ​​지식을 제공했으면합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다