python脚本输入可变参数 有哪些用Python语言讲算法和数据结构的书?
有哪些用Python语言讲算法和数据结构的书?
Python通用数据结构全白原理
Python中常见的数据结构可以统称为du作为一个容器。有序的zhi列(比如dao列表和元组)、映射(比如字典)和集合是三种主要的容器类型。
I .序列(列表、元组和字符串)
序列中的每个元素都有自己的编号。Python中有六个内置序列。列表和元组是最常见的类型。其他包括字符串、Unicode字符串、缓冲区对象和xrange对象。下面重点介绍以下列表、元组和字符串。
1.目录
列表是可变的,这是它区别于字符串和元组的最重要的特征。总之,列表可以被修改,但是字符串和元组可以。;t.
(1)、创建
您可以通过以下创建列表:
一个
2
三
四
列表1[你好,世界]
打印列表1
列表2[1,2,3]
打印列表2
输出:
[你好,世界]
[1, 2, 3]
如您所见,该方法与javascript中的数组非常相似。
(2)列表功能
list函数(事实上,list是一种类型而不是函数)对于创建字符串列表非常有效:
一个
2
列表3列表(你好)
打印列表3
输出:
[h,
Python中赋值,浅拷贝,深拷贝都是什么意思?
和很多语言一样,Python可以分为简单赋值、浅层复制和深层复制。
在学习的过程中,对浅抄的理解一开始是非常模糊的。但是,经过一系列的实验,我发现我对这三个概念有了更好的理解。
一.转让
赋值是这三种操作中最常见的。让 让我们通过一些例子来分析赋值操作:
Str案例
代码如下:: gtgt gt A hellogtgt B hellogtgt C AGT gtt[ID(x)for x in A,B,c] [4404120000,4404120000,4404120000]从上面的指令中,我们可以发现A,B,C的地址是相同的。所以上面的赋值操作相当于c a b hello。
赋值是指系统先给一个变量或对象分配内存(你好这里),然后再给A、B、c分配地址。。所以他们的地址是一样的。
列表示例
代码如下::,gtgt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt [ID (x) for x in a,b,c] [403975952,40 Why?
因为str是不可变的,h: gtgt gt A world gtgtgt[ID(x)for x in A,B,c] [4404120432,4404120000,4404120000] gtgt print a,B,c world hello hello此时,A的地址和值发生了变化,但B,C的地址和值没有变化。由于str的不变性,A需要重新打开内存空间重新赋值,所以A的值发生变化,A指向的地址也发生变化。b和C不会因为h: gtgt gt a[0]world gtgtgt[ID(x)for x in a,b,c] [4403975952,4404095096,4403975952] gtgt print a,b,c [world] [world]。由于list的可变性,修改list的值不需要再开辟一个空间,只需要修改原地址的值即可。所以a和c都变了。
了解了以上的区别,就可以很好的分析浅抄和深抄了。
我们都用list做例子。
第二,浅层复制
代码如下:: gtgt gt A[你好,[123,234]]gtgt gt B A[:]gtgt t[ID(x)for x in A,b] [4496003656,4496066752]gtgt gt[ID(x)for x in A][4496091584,4495947536]gtgt gt[ID(x)for x in B][449606067536列表是可变的,所以要开辟不同的空间。浅抄是抄吗?看第5行-
8.我们发现A和B中元素的地址是相同的。说字符串的h: gtgt gt a[0]worldgtgtgt a[1]。附加(345) gtgt gt打印a,a,
在,b,ba [world,[123,234,345]] b [h: gtgt from copy import deepcopygtgt A[hello,[123,234]]gtgt B deepcopy(A)gtgt[ID(x)for x in A,b] [4496066824,4496066680]gtgt gt[ID(x)for x in A][4496091584,4496067040]gtgt gt[ID(x)for x in B][这是一个完整的副本。
修改a的值后:
复制代码如下:: gtgt gt a[0]worldgtgtgt a[1]。附加(345) gtgt gt打印a,a,
,B,ba [world,[123,234,345]] b [hello,[123,234]]从第4,5行可以发现,只修改了A,B根本没有修改。因为B是完整的副本,所以元素地址都和A不一样,如果A被修改,B不会受到影响。
总结:
1.赋值就是把一个对象的地址赋给一个变量,让变量指向地址(旧瓶装新酒)。
2.浅拷贝是在另一个地址创建一个新的变量或容器,但容器中元素的地址都是源对象元素地址的拷贝。即据说新容器指向旧元素(新瓶装旧酒)。
3.深度拷贝是在另一个地址创建一个新的变量或容器,同时容器中元素的地址也是新打开的,只是值相同,这是一个完整的拷贝。也就是说(新瓶装新酒)。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。