接下來繼續講之前沒提到的 copy(),我們依續之前的列表,來做觀察,看看使用 copy() 有什麼不一樣?

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. names = ["Rogers", "Stark", "Thor", "Loki", "Natasha", "Coulson"]
  4. name2 = names.copy()
  5. print(names)
  6. print(name2)
  7. ---------------執行結果---------------
  8. ['Rogers', 'Stark', 'Thor', 'Loki', 'Natasha', 'Coulson']
  9. ['Rogers', 'Stark', 'Thor', 'Loki', 'Natasha', 'Coulson']
  10. Process finished with exit code 0

看起來一樣,那接下來我們來修改一下,把 Thor 修改成中文 索爾 ,來觀察一下結果

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. names = ["Rogers", "Stark", "Thor", "Loki", "Natasha", "Coulson"]
  4. name2 = names.copy()
  5. print(names)
  6. print(name2)
  7. names[2] = "索爾"
  8. print(names)
  9. print(name2)
  10. ---------------執行結果---------------
  11. ['Rogers', 'Stark', 'Thor', 'Loki', 'Natasha', 'Coulson']
  12. ['Rogers', 'Stark', 'Thor', 'Loki', 'Natasha', 'Coulson']
  13. ['Rogers', 'Stark', '索爾', 'Loki', 'Natasha', 'Coulson']
  14. ['Rogers', 'Stark', 'Thor', 'Loki', 'Natasha', 'Coulson']
  15. Process finished with exit code 0

嗯,看起來 names 裡的 Thor 已被修改成中文 索爾,而 names2 裡的 Thor 則是不變,接下來我們在來做個小變化,在現有的列表中,在插入一個列表

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. names = ["Rogers", "Stark", "Thor", "Loki",["Jarvis", "Potts"], "Natasha", "Coulson"]
  4. name2 = names.copy()
  5. print(names)
  6. print(name2)
  7. names[2] = "索爾"
  8. print(names)
  9. print(name2)
  10. ---------------執行結果---------------
  11. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  12. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  13. ['Rogers', 'Stark', '索爾', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  14. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  15. Process finished with exit code 0

再來如果我想要把剛剛加進去的列表裡的 Jarvis 給變成大寫字母

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. names = ["Rogers", "Stark", "Thor", "Loki",["Jarvis", "Potts"], "Natasha", "Coulson"]
  4. name2 = names.copy()
  5. print(names)
  6. print(name2)
  7. names[2] = "索爾"
  8. names[4][0] = "JARVIS"
  9. print(names)
  10. print(name2)
  11. ---------------執行結果---------------
  12. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  13. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  14. ['Rogers', 'Stark', '索爾', 'Loki', ['JARVIS', 'Potts'], 'Natasha', 'Coulson']
  15. ['Rogers', 'Stark', 'Thor', 'Loki', ['JARVIS', 'Potts'], 'Natasha', 'Coulson']
  16. Process finished with exit code 0

咦,有發現一個很神奇的問題嗎?為什麼 names裡的JARVISnames2的JARVIS 是一樣都是大寫的?但為什麼之前的 names裡的索爾names2裡的Thor 並沒有被複製過來,這個叫做 淺copy(),所謂的 淺copy() 就是只複製記憶體裡位置第一層的列表,這原理就有點像是我們之前在一開始所提到的變量,不清楚的可以回頭看一下,或是看下圖我的理解

那如果想要真正全部的複製下來的話,這次我們引入一個 import copy 這個模塊來做完全複製

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. import copy
  4. names = ["Rogers", "Stark", "Thor", "Loki",["Jarvis", "Potts"], "Natasha", "Coulson"]
  5. name2 = copy.copy(names)
  6. print(names)
  7. print(name2)
  8. names[2] = "索爾"
  9. names[4][0] = "JARVIS"
  10. print(names)
  11. print(name2)
  12. ---------------執行結果---------------
  13. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  14. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  15. ['Rogers', 'Stark', '索爾', 'Loki', ['JARVIS', 'Potts'], 'Natasha', 'Coulson']
  16. ['Rogers', 'Stark', 'Thor', 'Loki', ['JARVIS', 'Potts'], 'Natasha', 'Coulson']
  17. Process finished with exit code 0

吚~結果居然跟上次淺copy()使用的一樣,其實是不一樣的,這個是完全複製下來了,只是我們要改成 深copy(),修改一下,再觀察一下

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. import copy
  4. names = ["Rogers", "Stark", "Thor", "Loki",["Jarvis", "Potts"], "Natasha", "Coulson"]
  5. name2 = copy.deepcopy(names)
  6. print(names)
  7. print(name2)
  8. names[2] = "索爾"
  9. names[4][0] = "JARVIS"
  10. print(names)
  11. print(name2)
  12. ---------------執行結果---------------
  13. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  14. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  15. ['Rogers', 'Stark', '索爾', 'Loki', ['JARVIS', 'Potts'], 'Natasha', 'Coulson']
  16. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  17. Process finished with exit code 0

嗯,看起來已經完全獨立複製一份了,但大多數情況下,不需要獨立在複製一份,這個如果當列表夠大時,做了deepcoy()會很占記憶體空間的,要小心使用。接下來要在試一下把列表做 for循環

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. import copy
  4. names = ["Rogers", "Stark", "Thor", "Loki",["Jarvis", "Potts"], "Natasha", "Coulson"]
  5. for i in names:
  6. print(i)
  7. ---------------執行結果---------------
  8. Rogers
  9. Stark
  10. Thor
  11. Loki
  12. ['Jarvis', 'Potts']
  13. Natasha
  14. Coulson

嗯!很簡單,全部都有打印出來了,那如果想跳著打印列表的話,又該怎麼做?

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. import copy
  4. names = ["Rogers", "Stark", "Thor", "Loki",["Jarvis", "Potts"], "Natasha", "Coulson"]
  5. print(names)
  6. print(names[0:-1:2])
  7. ---------------執行結果---------------
  8. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  9. ['Rogers', 'Thor', ['Jarvis', 'Potts']]
  10. Process finished with exit code 0

還記得之前有提到過,在列表裡,0-1 可以省略,那上面的代碼可不可以在優化一下

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. import copy
  4. names = ["Rogers", "Stark", "Thor", "Loki",["Jarvis", "Potts"], "Natasha", "Coulson"]
  5. print(names)
  6. print(names[::2])
  7. ---------------執行結果---------------
  8. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  9. ['Rogers', 'Thor', ['Jarvis', 'Potts'], 'Coulson']
  10. Process finished with exit code 0

如果不跳著打印的話,也可以寫成

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. import copy
  4. names = ["Rogers", "Stark", "Thor", "Loki",["Jarvis", "Potts"], "Natasha", "Coulson"]
  5. print(names)
  6. print(names[:]) # 這個也可以 print(names[::])
  7. ---------------執行結果---------------
  8. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  9. ['Rogers', 'Stark', 'Thor', 'Loki', ['Jarvis', 'Potts'], 'Natasha', 'Coulson']
  10. Process finished with exit code 0

但這個就較不常使用,看起來比較不直覺。

Python 基礎 - 列表的使用_v2的更多相关文章

  1. Python 基礎 - 列表的使用

    如果想要存所有 Marvel's The Avengers 角色的人名,該如何存呢?請用目前已學到的知識來實做- #!/usr/bin/env python3 # -*- coding:utf-8 - ...

  2. Python 基礎 - for流程判斷

    今天介紹另一個循環判斷式 for循環,首先,先寫一個很簡單的 for循環的代碼 #!/usr/bin/env python3 # -*- coding:utf-8 -*- for i in range ...

  3. Python 基礎 - if else流程判斷

    hmm~前面講了那麼多,終於可以稍稍的正式進入另一個階段,沒錯,要開始寫判斷式了 這次先從最簡單的判斷式開始,if else 開始- Go 首先,之前有寫有一個簡單的互動式 用戶輸入 的代碼,忘記了嗎 ...

  4. Python 基礎 - 文件操作_v2

    嗯,那如何要把游標的位置給打印來? #!/usr/bin/env python3 # -*- coding:utf-8 -*- f = open('test', 'r') print(f.tell() ...

  5. Python 基礎 - 數據類型

    標準數據類型 Python3 中有六個標準的數據類型 1 Number(數字) 2 String(字符串) 3 List (列表) 4 Tuple (元組) 5 Sets (集合) 6 Diction ...

  6. Python 基礎 - 文件的操作

    在來我們來玩一下文件操作,這個在未來工作上,也是會很常用到的功能 Python2.7中,可以用file()來打開文件,而在Python3中,一律都是用open(),接下來在當前目錄下,先建立一個空文件 ...

  7. Python 基礎 - 字典的操作使用

    接下來介紹字典,這在未來工作上,會是很常使用的,就來好好了解一下唄- 字典是一個 key(鍵)-value(值) 的數據類型,可以儲存很多訊息 #!/usr/bin/env python3 # -*- ...

  8. Python 基礎 - 字符串常用操作

    字符串常用操作 今天就介紹一下常用的字符串操作,都是以 Python3撰寫的 首字母變大寫 #!/usr/bin/env python3 # -*- coding:utf-8 -*- name = & ...

  9. Python 基礎 - 淺copy補充說明

    在 import copy 這個模塊裡 基於第一個列表來做淺copy,實際上第二個列表裡的元素,是第一個列表的 引用. 接下來介紹 淺copy有三種方式可以使用 #!/usr/bin/env pyth ...

随机推荐

  1. .net下开发ActiveX控件

    `   ActiveX 是一个开放的集成平台,为开发人员. 用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ActiveX, 可 ...

  2. 《Pro Express.js》学习笔记——概述

    要学Node.js,先学Express.js. Express.js是Node.js官方推荐的基础框架. Express.js框架经过一系列的发展,已经到了4.x版本.新的版本解决了3.x之前版本的依 ...

  3. 前端开发week3

    开发工具学习ing... lesscss 框架 lesscss是一种动态样式语言,属于css预处理语言的一种,它使用类似css的语法,为css的赋予了动态语言的特性,如变量.继承.运算.函数等,更方便 ...

  4. c语言问卷

    1.你对自己的未来有什么规划?做了哪些准备? 答:关于未来我想从事设计网页.做小游戏或者app的工作,因为是金融服务外包方向,也许也会进入银行或者证券公司管理银行系统.让英语更近一层,可进入外企工作. ...

  5. Unbalanced calls to begin/end appearance transitions for **

    在自定义UITabBarController中点击视图跳转的时候,有可能就出现这个问题, 解决方法就是在自定义的UITabBarController中的视图显示消失通知方法中添加如下方法: - (vo ...

  6. tomcat启动不了

    今天弄了一个项目想在在自己的电脑上面运行起来,当部署在tomcat上的时候发现tomcat就是启动不来,思忖了一段时间后发现原来是tomcat的相关jar没有导入进去.所以,properties-&g ...

  7. 使用jQuery,实现完美的表单异步提交

    jQuery异步提交表单 <form id="form1" method="post"> <table border="1" ...

  8. C++虚函数和虚函数表

    前导 在上面的博文中描述了基类中存在虚函数时,基类和派生类中虚函数表的结构. 在派生类也定义了虚函数时,函数表又是怎样的结构呢? 先看下面的示例代码: #include <iostream> ...

  9. vmware虚拟机网络自动断开的问题

    最近搭建一个集群环境,因此用vmware安装了几台虚拟机,系统是centos7.2. 但是发现网络总是不经意间自动断开,重启网络(service network restart)恢复. 虚拟机网络类型 ...

  10. 【转】输入/输出流 - 全面掌握IO

    File类: 程序中操作文件和目录都可以使用File类来完成即不管是文件还是目录都是使用File类来操作的,File能新建,删除,重命名文件和目录,但File不能访问文件内容本身,如果需要访问文件本身 ...