Python 인터뷰 자주 묻는 질문: 가변 데이터 유형과 불변 데이터 유형의 차이점

WBOY
풀어 주다: 2023-05-19 16:04:06
앞으로
1200명이 탐색했습니다.

Python 面试高频问题:可变数据类型和不可变数据类型的区别

Python 가변 데이터 유형과 불변 데이터 유형은 기본적이고 중요한 테스트 포인트입니다. 간단히 말하면, 여기의 변수는 가변적이고 불변이며, 변수가 변경될 때 데이터의 주소가 변경되는지 여부를 참조합니다!

변수 데이터 유형: 변수의 값이 변경되면 새 개체를 만드는 것과 같습니다(즉, 주소가 변경됩니다).

변수 데이터 유형: 변수의 값은 변경되지만 개체의 주소는 변경되지 않습니다.

불변 데이터 유형: 튜플, 문자열, 숫자 값.

가변 데이터 유형: 사전, 목록, 집합.

References

변경 가능한 데이터 유형과 불변 데이터 유형에 대해 이야기하기 전에 참조의 개념에 대해 이야기해야 합니다. Python 변수는 힙 메모리의 개체를 가리키는 개체에 대한 참조를 저장합니다. 힙에 할당된 개체는 두 가지 범주로 나누어집니다. 하나는 변경 가능한 개체이고 다른 하나는 변경 불가능한 개체입니다. 예: s1="abc".

사실 변수 s1은 abc 객체에 대한 참조입니다. s1은 abc가 저장된 메모리 주소를 가리킵니다. s1의 주소 값을 보려면 주소를 변환하는 함수 id를 사용할 수 있습니다. 값을 십진수로 표시합니다. 아래 그림과 같이 print(id(s1))를 사용하세요.

Python 面试高频问题:可变数据类型和不可变数据类型的区别

불변 데이터 유형

문자열을 예로 들어 코드로 바로 이동합니다.

s1="abc"
print(id(s1))
s1="xyz"
print(id(s1))
로그인 후 복사

출력:

140712532603136
140712532603168
로그인 후 복사

You 출력 결과의 변화를 확인할 수 있습니다. 문자열형 변수의 값과 주소도 이에 따라 변경됩니다.

다음에는 서면 인터뷰에서 자주 묻는 질문이기도 한 이 예를 살펴보겠습니다.

#위 코드를 기반으로 다음 코드를 작성합니다.

s2=s1
print(id(s1))
print(id(s2))
로그인 후 복사

출력:

743316570224
743316570224
로그인 후 복사

s2=s1이 실제로 s2와 s1 모두 동일한 주소를 가리키는 것을 볼 수 있습니다.

계속해서 s2의 값을 변경해 보겠습니다.

s2="def"
print(id(s1))
print(s1)
print(id(s2))
print(s2)
로그인 후 복사

출력:

879864758384
xyz
879889887984
def
로그인 후 복사

이를 보면 s2 값을 변경해도 s1 값에 영향을 주지 않는 이유를 이해할 수 있습니다. s1과 s2는 서로 다른 주소를 가리키기 때문에 s1의 값은 변경되지 않았습니다!

가변 데이터 유형

목록을 예로 들어보겠습니다.

l = [1, 2, 3]
print(id(l))
l.remove(1) # 删除元素
print(id(l))
l.append(4) # 增加元素
print(id(l))
l[1] = '8' # 修改元素
print(id(l))
로그인 후 복사

출력:

405927907912
405927907912
405927907912
405927907912
로그인 후 복사

목록이 추가, 삭제, 수정되는 것을 볼 수 있습니다. 목록의 주소는 변경되지 않지만 값은 변경됩니다. 변수가 변경되고 새 변수가 생성되지 않는 경우 변수가 참조하는 개체의 주소는 변경되지 않습니다.

앞의 문자열 할당 예시와 비슷한 다음 예시를 다시 살펴보세요.

l1=['a','b','c']
l2=l1
print(id(l1))
print(id(l2))
l2.append('d')
print("************")
print(id(l1))
print(l1)
print(id(l2))
print(l2)
로그인 후 복사

출력:

838366483528
838366483528
************
838366483528
['a', 'b', 'c', 'd']
838366483528
['a', 'b', 'c', 'd']
로그인 후 복사

출력 결과는 여기서 설명하지 않습니다. l1과 l2의 주소가 동일하므로 서로 영향을 미치기 때문입니다.

목록 복사

목록을 문자열처럼 복사하여 값은 같지만 주소가 다른 두 개의 목록을 생성하려면 어떻게 해야 합니까? 사실 이 문제의 본질은 리스트의 직접 할당(직접 할당에 사용)과 복사(복사는 얕은 복사와 깊은 복사로 나누어짐)의 차이에 있습니다. 얕은 복사에 대한 관련 지식을 소개하기 위해 다른 글을 작성하겠습니다. 그리고 딥카피에 계속해서 관심을 가져주세요.

여기서는 먼저 list() 생성자를 사용하여 비교적 간단한 복사 방법을 소개합니다. 코드는 다음과 같습니다.

l3=['x','y','z']
l4=list(l3)
print(id(l3))
print(id(l4))
l4.append('a')
print(l3)
print(l4)
로그인 후 복사

출력:

831456302152
831480344136
['x', 'y', 'z']
['x', 'y', 'z', 'a']
로그인 후 복사

결과에서 볼 수 있듯이 l3과 l4의 주소가 다릅니다. , 서로 영향을 미치지 않습니다. 인덱스, 목록 생성, copy() 등을 사용하여 두 목록이 서로 다른 목록 객체를 가리키도록 만들 수도 있는데, 여기서는 하나씩 소개하지 않겠습니다!

위 내용은 Python 인터뷰 자주 묻는 질문: 가변 데이터 유형과 불변 데이터 유형의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿