Python:  

  在Python中, 对于list, 切片会返回一个新的list, 而不会改变原有的list. 注意这儿说的"不会改变原有的list"指的是下面的这种情况:

a = [10, 20, 30]
b = a[1:3]
print('a is {0}'.format(a))
print('b is {0}'.format(b)) print('Change b---------------')
b[0] = 8
print('a is {0}'.format(a))
print('b is {0}'.format(b)) print('Change a---------------')
a[1] = 1024
print('a is {0}'.format(a))
print('b is {0}'.format(b))

  Output:

a is [10, 20, 30]
b is [20, 30]
Change b---------------
a is [10, 20, 30]
b is [8, 30]
Change a---------------
a is [10, 1024, 30]
b is [8, 30]

  从上面的代码以及输出结果中, 我们可以看出, 执行完"b = a[1:3]"后, 更改a或b中任何一个都不会对另外一个有影响.

  请注意上面说的这种情况与下面这种情况的区别:

def change(x):
  x[1:3] = ['a', 'b'] a = [10, 20, 30]
print('a is {0}'.format(a))
change(a)
print('a is {0}'.format(a))

  Output:

a is [10, 20, 30]
a is [10, 'a', 'b']

Java:

  现在让我们来看看Java中的'切片'操作(这里指的是List接口中的subList()方法)与Python中的切片操作的区别:  (此处把

Java的subList()搬出来, 仅仅是为了对比一下,让大家更好的理解Python中的list切片"不会改变原有的list"这句话)

public static void main(String[] args){
List<Integer> alist = new ArrayList<Integer>();
for (int i = 0; i < 10; ++i){
alist.add(i);
}
List<Integer> blist = alist.subList(1, 5);
System.out.println("alist:\n" + alist);
System.out.println("blist:\n" + blist);
System.out.println(); System.out.println("change alist----------------");
alist.set(1, 888);
System.out.println("alist:\n" + alist);
System.out.println("blist:\n" + blist);
System.out.println(); System.out.println("change blist----------------");
blist.set(1, 1024);
System.out.println("alist:\n" + alist);
System.out.println("blist:\n" + blist);
}

  Output:

alist:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
blist:
[1, 2, 3, 4] change alist----------------
alist:
[0, 888, 2, 3, 4, 5, 6, 7, 8, 9]
blist:
[888, 2, 3, 4] change blist----------------
alist:
[0, 888, 1024, 3, 4, 5, 6, 7, 8, 9]
blist:
[888, 1024, 3, 4]

  从上面的代码以及输出结果中, 我们可以看出, 执行完"List<Integer> blist = alist.subList(1, 5);"后, 更改alist或blist中任何一个,

都会对另外一个有影响.

List Slice in Python(Compared with Java)的更多相关文章

  1. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  2. paip.性能跟踪profile原理与架构与本质-- python扫带java php

    paip.性能跟踪profile原理与架构与本质-- python扫带java php ##背景 弄个个输入法音标转换atiEnPH工具,老是python性能不的上K,7k记录浏览过k要30分钟了. ...

  3. python 自动发现Java端口

    python 自动发现Java端口 #!/usr/bin/env python #encoding: utf8 import subprocess try: import json except Im ...

  4. JPype:实现在python中调用JAVA

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  5. PySpark 的背后原理--在Driver端,通过Py4j实现在Python中调用Java的方法.pyspark.executor 端一个Executor上同时运行多少个Task,就会有多少个对应的pyspark.worker进程。

    PySpark 的背后原理 Spark主要是由Scala语言开发,为了方便和其他系统集成而不引入scala相关依赖,部分实现使用Java语言开发,例如External Shuffle Service等 ...

  6. py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. : java.lang.IllegalArgumentException: Unsupported class file major version 55

    今天小编用Python编写Spark程序报了如下异常: py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apach ...

  7. 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)

    2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...

  8. 遍历文件路径python版,java版

    python: # 获取所有txt路径列表 file_list = [] def gci(filepath): files=os.listdir(filepath) for fi in files: ...

  9. Ubuntu1404安装eclipse(目的是为了运行python,当然java更可以)

    原创文章,不得转载 我是彩印网(www.caiyin.com) 的技术开发人员,在这里首先请允许我做下业务的介绍 彩印网是由北京出彩电子商务有限公司运营的专业印刷电商,集线上购物.支付.设计.制作.配 ...

随机推荐

  1. 【转载】浏览器加载和渲染html的顺序

    1.浏览器加载和渲染html的顺序 1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素 ...

  2. 微信小程序的目录结构解剖

    在微信小程序当中,我们看到有: .js后缀文件,.json后缀文件,.wxss后缀文件,.wxml后缀文件 .js后缀文件就是我们写的普通的js文件 .json后缀文件就是小程序的配置文件,比如:wi ...

  3. Java时间类总结

    java.util.Date 包含有年月日时分秒,精确到毫秒级别. 官方解释: // The class Date represents a specific instant in time, wit ...

  4. 关于搭建HTTPS服务器服务

    关于 HTTPS 的基本原理大家都已经不再陌生,今天和大家说说如何搭建一个支持 HTTPS 的服务端. 服务端的 HTTPS HTTPS 已经几乎成为了当前互联网推荐的通信方式,它能最大化保证信息传输 ...

  5. Redis Scan的使用方式以及Spring redis的坑

    SpringRedisTemplate针对这个Scan进行了封装,示例使用(针对最新库spring-data-redis-1.8.1.RELEASE): Set<Object> execu ...

  6. myeclipse中文编码错误,没有GBK选项

    默认编码是UTF-8,但是导入GBK工程后,直接改为ISO-8859-1,但是还是编码错误. 用网上的: 全局编码设置:编码设置的方法:ToolBar-->Window-->Prefere ...

  7. libsvm以概率输出单个test样例的判别结果

    在函数svmtrain和svmpredict的输入参数部分加入'-b 1'比如原先是 svmtrain -c 8.0 -g 0.0078125 a1a.scale 修改过后就是 svmtrain -b ...

  8. 第4步:创建RAC共享磁盘组

    方法一:使用asmdevices(推荐使用,但不适用EMC Powerpath) )查看硬盘的SCSI号,两个机器认到的/dev/sda对应在实际的物理盘可能不是一块,但scsi号肯定是完全一致的. ...

  9. Unity3D学习笔记——NGUI之UIPopupList

    UIPopupList:将这个组件添加到Button上,即可构建一个下拉列表. 效果图如下: 一:使用步骤 1.首先创建一个Sprite作为button. 2.创建一个label,用于显示当前选择的选 ...

  10. WPF命令绑定 自定义命令

    WPF的命令系统是wpf中新增加的内容,在以往的winfom中并没有.为什么要增加命令这一块内容.在winform里面的没有命令只使用事件的话也可以实现程序员希望实现的功能.这个问题在很多文章中都提到 ...