찾다
백엔드 개발파이썬 튜토리얼Python 가변 객체와 불변 객체에 대한 자세한 분석

Python 가변 객체와 불변 객체에 대한 자세한 분석

파이썬의 모든 것은 객체로 볼 수 있습니다. 각 객체에는 고유한 ID, 유형 및 값이 있습니다.

  1. id: 객체가 생성되면 해당 ID는 변경되지 않습니다. 여기서 id는 실제로 메모리에 있는 객체의 주소입니다. id()를 사용하여 메모리에 있는 객체의 주소를 확인할 수 있습니다.
  2. type: id와 마찬가지로 객체가 생성되면 유형을 변경할 수 없습니다.
  3. value: 객체의 값은 가변적입니다. . 값 값이 변경을 지원하는지 여부에 따라 다릅니다.
관련 학습 권장사항:

python 비디오 튜토리얼

불변 객체

일반적인 불변 객체(불변 객체):

번호: int, float, complex

string
  1. tuple
  2. Frozenset: 또 다른 집합의 종류
  3. 예를 통해 경험해 보자
Example

>>> x=1
>>> y=x
>>> id(x)==id(y)
True
>>> id(1)==id(y)
True

여기서 두 개의 int 객체가 생성되고 x와 y가 동일한 객체를 가리키도록 한 다음 x를 수정하려고 합니다. x+1

>>>x=x+1
이때 x의 id 값은 여전히 ​​y의 id, 1의 id와 동일합니까?

>>> x=x+1
>>> id(x)==id(y)
False
>>> id(x)==id(1)
False
>>> id(1)==id(y)
True

x가 가리키는 객체는 바뀌었지만 1은 바뀌지 않았다는 것을 결과를 보면 어렵지 않게 알 수 있습니다. 이는 불변 객체입니다. 불변 객체의 경우 일단 생성되면 변경할 수 없습니다.

참고: 불변성은 절대적 불변성과 엄격하게 동일하지 않습니다

>>> a=([1],2,3)
>>> id(a)
4338862696
>>> id(a[0])
4338949128
>>> a[0][0]=0
>>> id(a)
4338862696
>>> id(a[0])
4338949128

위의 예에서 a[0]의 값을 변경했지만 id 값에는 영향을 미치지 않았다는 것을 쉽게 알 수 있습니다. 불변 컨테이너 객체에 가변 객체에 대한 참조가 포함되어 있는 경우 후자가 변경되면 전자의 값도 변경되지만 컨테이너는 id 값이 변경되지 않으므로 여전히 불변 객체입니다.

가변 객체

일반적인 가변 객체:

list

dict
  1. set
  2. 예제를 통해 비슷하게 느껴보세요
예제

>>> c = [1,2,3]
>>> b = c
>>> id(b)==id(c)
True

2개 만들기 객체를 나열하고 c, d가 포인트가 되도록 둡니다. 그런 다음 c

c[0]=4
를 수정하려고 합니다. 이때 두 객체의 id 값이 일치하는지 확인하세요

>>> id(c)==id(b)
True

수정 후에도 c, d는 여전히 동일한 객체를 가리키므로 변경 가능한 개체의 경우 값을 수정해도 해당 ID에 아무런 영향을 미치지 않는다는 결론을 내리는 것은 어렵지 않습니다. 4457707912

4:[5, 6, 10], id:4457707912

다른 예를 보면

eg1

def update_list(nums_list):
  print(f'2 id:{id(nums_list)}')
  nums_list += [10]
  print(f'3 id:{id(nums_list)}')

  
number_list = [5, 6]
print(f'1:{number_list}, id:{id(number_list)}')   
update_list(number_list)
print(f'4:{number_list}, id:{id(number_list)}')

결과를 보세요

1:1, id:4343768 416
2 id:4343768416
3 id:4343768448

4:1, id:4343768416

일부 다른 글에서는 위의 eg0을 참조 전달, eg1을 값 전달이라고 합니다. 그러나 공식 문서에는 이 두 용어와 관련된 내용이 발견되지 않았거나 이 방법은 위 두 가지 중 하나가 아닙니다.

여기서 핵심은 다음과 같습니다.

변경 가능한 개체의 경우 함수 값을 변경하면 개체가 변경됩니다. 불변 개체의 경우 함수 값을 변경해도 개체에 아무런 영향이 없습니다.

위 내용은 Python 가변 객체와 불변 객체에 대한 자세한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 jb51에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구