# Python中的数据类型
'''
内置类型:
字符串类型(str)
数值类型(int,float,复数)
布尔类型(True,False)
列表(list)
字典(dict)
元组(tuple)
集合(set)
'''
# 1.哪些内置数据类型是可变对象
'''
不可变对象:不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
通过id()方法查看指向地址,is判断是否相同地址
字符串
str1 = 'black' ==> 变量a存储字符串black
print(id(str1)) ==> 查看此时变量a存储字符串black的id
str2 = 'black' ==> 变量b存储字符串black
print(id(str2)) ==> 查看此时变量b存储字符串black的id
print(id('black')) ==> 查看字符串id
变量a和变量b都存储了同一个字符串black,并且指向的字符串的id相同
此时将black进行改变
str1 += 's'
print(id(str1),id(str2),id('black')) ==> 变量str1将存储的字符串改变,地址发生改变
由此可以看出字符串是不可变的,不可变对象,变量对应内存的值不允许被改变。当变量要改变时,实际上是把原来的值复制一份后再改变,开辟一个新的地址,
元组
tuple1 = (1,2)
tuple2 = (1,2)
print(tuple1 is tuple2) ==> 两个元组地址相同
tuple1 += 3 ==> 添加一个新的元素
print(tuple1 is tuple2) ==> 两个元组地址不相同了
元组是不可变对象
--------------------------------------------------------------------------------------------------------
可变对象:可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。
列表
list1 = [1,2,3]
list2 = [1,2,3]
print(id(list1),id(list2)) ==> 两个列表对应不同的地址,可以看出即使值相同的对象也是不同的地址
list1 += [4]
print(id(list1)) ==> 修改了元素,地址也相同,可以理解成一盒饼干,饼干吃了一个,盒子还是同一个盒子
所以列表是可变对象,可变对象是允许同一对象的内容,即值可以变化,但是地址是不会变化的。但是需要注意一点,对可变数据类型的操作不能是直接进行新的赋值操作,
另外字典和集合也都是可变对象
'''