列出python中可变数据类型和不可变数据类型,并简述原理

可变类型(mutable):变量进行append、+=等这种操作后 == 改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

  • list
  • dict
  • set
  • bytearray
  • user-defined classes (除非是特别定义的不可变)
a = [1,2]
b = [1,2]
print(id(a))
print(id(b))

不可变类型(immutable):改变了变量的值 == 新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址), python的id() 方法让你明白

  • int
  • float
  • decimal
  • complex
  • bool
  • string
  • tuple
  • range
  • frozenset
  • bytes

例子

a = 3
b = 3
print(id(a))
print(id(b)) # mem addr is same with a
a = 5
print(id(a))

boolx = True
print(id(boolx))
boolx = False
print(id(boolx))

输出

533780592600
533780592600                                                

533780592664                                                

533780191712                                                

533780191744                                                [Program finished]

原文地址:https://www.cnblogs.com/sea-stream/p/11188732.html

时间: 2024-10-09 06:19:34

列出python中可变数据类型和不可变数据类型,并简述原理的相关文章

Python中函数的参数传递与可变长参数

1.Python中也有像C++一样的默认缺省函数 1 def foo(text,num=0): 2 print text,num 3 4 foo("asd") #asd 0 5 foo("def",100) #def 100 定义有默认参数的函数时,这些默认值参数位置必须都在非默认值参数后面. 调用时提供默认值参数值时,使用提供的值,否则使用默认值. 2.Python可以根据参数名传参数 1 def foo(ip,port): 2 print "%s:%d

python中的引用传递,可变对象,不可变对象,list注意点

python中的引用传递 首先必须理解的是,python中一切的传递都是引用(地址),无论是赋值还是函数调用,不存在值传递. 可变对象和不可变对象 python变量保存的是对象的引用,这个引用指向堆内存里的对象,在堆中分配的对象分为两类,一类是可变对象,一类是不可变对象.不可变对象的内容不可改变,保证了数据的不可修改(安全,防止出错),同时可以使得在多线程读取的时候不需要加锁. 不可变对象(变量指向的内存的中的值不能够被改变) 当更改该对象时,由于所指向的内存中的值不可改变,所以会把原来的值复制

Python中比较特殊的几种数据类型list、tuple、dict、set

list list(列表)是Python内置的一种数据类型,它是一种有序.可变的集合,可以随时添加和删除其中的元素. >>> classmates = ['Li', 'Tom', 'Alice'] >>> classmates ['Li', 'Tom', 'Alice'] 变量classmates就是一个list.关于list的操作如下: 方法 len():获取list元素的个数 >>> len(classmates) 3 通过索引访问 ''' 遇到问

python中如何判断一个变量的数据类型

mport types type(x) is types.IntType # 判断是否int 类型 type(x) is types.StringType #是否string类型 ......... -------------------------------------------------------- 超级恶心的模式,不用记住types.StringType import types type(x) == types(1) # 判断是否int 类型 type(x) == type('a

浅谈python中selenium库调动webdriver驱动浏览器的实现原理

最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得. 当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢? 1 from selenium import webdriver 2 driver = webdriver.Chrome() 3 driver.get('http://www.baidu.com') 首先我们来看一下selenium库的结构: 很显然,selenium就是一个软件包,里面有两个一级子包,commo

Python中的几种数据类型

大体上把Python中的数据类型分为如下几类: Number(数字)                  包括int,long,float,complex String(字符串)                例如:hello,"hello",hello List(列表)                    例如:[1,2,3],[1,2,3,[1,2,3],4] Dictionary(字典)              例如:{1:"nihao",2:"h

(四)Python中的“四大才子”(字符串、列表、字典、集合)

前戏:在python中把数据序列分为可变(mutable)和不可变(immutable)两种 不可变:string.int.float.tuple 特点:相同对象只是占用一个内存地址,不管有多少个变量引用它,例如a=1,b=1 由于是不可变的,每次必须创建新的对象,之前不用的对象如果没有引用指向它,Python垃圾回收机制会自动清理掉 可变:list.dict 特点:相同对象,每次引用它都会在内存中开辟一块新地址来保存它,但是当我们对他的值进行操作时,内存地址是不会发生变化的 总结:python

Python 中的字符串、字典操作方法

一.字符串 在python中字符串是一种重要数据类型.其他数据类型分别为: 数字-number -------- int.long.float.complex这几种 字符串-string -------- "使用引号"引起来的都是字符串 元组-tuple ------------ (1,2)使用小括号引起来的元素,中间用逗号隔开 以上三个为Python中的不可变对象,创建后就不能改变的量-->指该变量指向内存中的值不能被改变,当改变某个变量时候,由于其所指的值不能被改变,相当于把

python中map()和dict()的用法

map()用法 map()是python的内置函数,会根据提供的函数对指定序列做映射. 语法: map(func, iter, ...) 其中func为一个功能函数,iter表示可迭代参数序列.map()将把func作用于参数列表的每个元素上,并返回一个新的list列表. def square(item: int)->int: return item*item a = [1, 2, 3, 4] b = map(square, a) print(list(b)) 以上将输出[1, 4, 9, 16