python 基础数据类型

本文介绍了Python中的基础数据类型,包括一切皆为对象的概念,强调对象由id、type和'value'组成。文章还讨论了Python的指针特性,区分了不可变对象(如int、string、tuple)和可变对象(如list、dict)。此外,文中提到了tuple的特殊性,虽然整体不可变,但若其包含可变对象,内部元素仍可改变。最后,文章简述了Python2和Python3中字符串的编码差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,一切皆为对象

a = 5   #a =5 在c中是非常普通的赋值,我们也通常把这个语句叫做赋值语句,但是在python中,这样的理解就错了。
id(a)
Out[20]: 1518791248
id(5)

Out[21]: 1518791248

#我们分别查一下他们的内存地址,发现地址是一样的,原来python把这语句看做是对象实例化的语句。就是把一个整数对象实例化变量为a,如果用c来写的话,要 写成:a= new 5()  ,很奇怪,一个类,或者对象是不可以用数字来命名的,但是可以作为对象实例化,或者类的实例化。

2,组成: id, type, 'value'

     'value'带引号,这里讲的是对象的组成,而不是属性。'int' object has no attribute 'value'

3, 一切皆指针

a = 5 

#在C的角度,应该写为  *a = 5。并不是定义了一个变量,而是定义了一个指针。在python中,确确地说,用的是指针变量。

4,类型: int,boolean,string,list,tuple,dict

5,不可变:int ,string,tuple

         可变: list,dict

  • 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址(原来值因为不再有对象指向它,就会被垃圾回收。)。
  • 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变
  • 当向系统申请创建一个变量时,系统先分配一块内存空间,该内存空间用于存储该变量。

    变量的数据结构包括2部分:第一部分用于存储变量的名称和变量的数据类型的长度,第二部分用于存储内存地址(即索引)。

    当变量未初始化时,第二部分数据为垃圾值;一旦初始化,该部分的值即为初始化值的内存地址。

  • 需要注意的是:tuple是不可变对象,但又和str和数值类型稍微有点区别。
add = (1, 2, 3)
aee = (1, 2, 3)
print(id(add), id(aee), id((1, 2, 3)))  # id各不相同
a = 2
b = 2
print(id(a), id(b), id(2))  # id都相同
astr = 'good'
bstr = 'good'
cstr = astr + ''
print(cstr is bstr) # True
print(id(astr), id(bstr), id('good'))  # 三个id相同
  • 平常说的tuple不可变更多时候是指里面存放的值不能被改变(有些特殊情况,如tuple里面存放了list,可改变list里的元素。但实际上这个tuple并没有被改变)。
add = (1, [2,3,4], 3)
id(add)

Out[34]: 2671383886368

add[1][2]=3
add
Out[36]: (1, [2, 3, 3], 3)

id(add)#id相同

Out[37]: 2671383886368

  • copy()与deepcopy()区别 : 浅拷贝copy()只是生成一个新的对象,数据结构以及索引关系未变。深拷贝会递归(逐层)拷贝list的数据结构(彻头彻尾的另立门户)
>>> import copy
>>> origin = [1, 2, [3, 4]]
#origin 里边有三个元素:1, 2,[3, 4]
>>> cop1 = copy.copy(origin)
>>> cop2 = copy.deepcopy(origin)
>>> cop1 == cop2
True
>>> cop1 is cop2
False 
#cop1 和 cop2 看上去相同,但已不再是同一个object
>>> origin[2][0] = "hey!" 
>>> origin
[1, 2, ['hey!', 4]]
>>> cop1
[1, 2, ['hey!', 4]]
>>> cop2
[1, 2, [3, 4]]
>> a = [1, 2, 3]
>>> b = a
>>> a = [4, 5, 6] //赋新的值给 a
>>> a
[4, 5, 6]
>>> b
[1, 2, 3]
# a 的值改变后,b 并没有随着 a 变

>>> a = [1, 2, 3]
>>> b = a
>>> a[0], a[1], a[2] = 4, 5, 6 //改变原来 list 中的元素
>>> a
[4, 5, 6]
>>> b
[4, 5, 6]
# a 的值改变后,b 随着 a 变了
#上下两端代码的对比意义说明了:list是可变对象,int是不可变对象。

6,python2解释器默认编码类型utf-8,每个汉字三个字节,len(*)==3,decode("utf-8")转换为unicode。python3解释器默认编码类型是unicode,len(*)==1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值