Python 3.6笔记开篇-------普通变量类型

来源:互联网 发布:app p图软件 编辑:程序博客网 时间:2024/06/05 20:00

最近突然好想玩爬虫,正好可以了解最近比较流行的python,写这篇博客的时候我其实已经对Python简单的过了一遍了,现在开始详细记录下,Python的一些重点要点。

--------------------------------------------------------------------------------------------------------------------

这里我全部用的是Python3.6版本进行的实验,这一篇主要整理一下,Python对于变量的一个理解(左值和右值)

近一年来,我了解了c c++ Android,感觉往往一些培训资料,对于内存讲的并不深刻,但是就我感觉而言,如果搞不懂最基本的内存写入和赋值的关系,是没有办法深入学习一门语言的,特别是自学。这里我就来梳理一下Python3.6的基本变量。

int double float str list 。。。。。这些都是基本的数据类型

但是Python不像c或者c++需要先声明变量,而且没有指针这个类型,那他到底是怎么玩的呢?

先看一段代码

num = 3s = "abc"flo = 1.1print(type(num))print(type(s))print(type(flo))
再来看结果

<class 'int'>
<class 'str'>
<class 'float'>
首先第一点,数据类型是存在的,再来看第二段代码

num = 3s = "abc"flo = 1.1# print(type(num))# print(type(s))# print(type(flo))print(id(num))print(id(s))print(id(flo))
看结果

1577633520
2450139417880
2450109898944

id()这个方法就是用来显示内存地址

Return the identity of an object.
手工翻译:返回一个对象的标志

看到这里我直接来说一下我的理解

举个例子:

num = 3

num其实就是一个指针,而3其实是一段内存

指针指向一段内存,ok没毛病,Python为我们省去了申请内存,声明指针等等一系列问题,id(num)返回的其实就是3的内存地址。

再来看第二个例子:

num = 3num2 = numprint(id(num))print(id(num2))
结果

1577633520
1577633520

简单看起来,像是简单的变量赋值,其实却是两个指针指向了同一个地址

第三个例子

num = 3print(id(num))num = 4print(id(num))
1577633520
1577633552

看结果有没有发现什么?

num------>内存A(值为3)num = 3

num------>内存B(值为4)num = 4

他并没有修改内存A的值,而是丢弃了内存A重新指向了一块内存(内存B)

很神奇的语言是不是(希望Python的内部申请和丢弃机制足够好。。。。。)

最后再补充一点,Python内部有一个优化机制

num = 3

num1 = 3

num2 = 3

这里有三个3,对应的其实是一块内存,数字字符串都适用。这个其实在深拷贝和浅拷贝的时候真的是容易混淆概念。。。。。。

好了第一篇不多说,就讲这点,这个系列,我会一直写到一些爬虫问题,同时准备重新开一个QT CPP的系列,对于原理更深刻的讲解。