python入门之三元运算,存址方式,深浅拷贝

三元运算

格式:

  name = 值1 if 条件 else 值2

  如果条件为True,那么将值1赋值给name,条件为False,那么将值2赋值给name

 

存址方式

  不同的数据类型在内存中的存址方式不同

  列表和字符串的区别:内存中,列表的每个元素占据一个内存空间,没有固定的元素数量限制,每个元素空间之间存在一种链表来记录单个元素空间的上一个元素和下一个元素地址,所以可以不用连续存储,有链表的存在,即使不连续存储,也是有序的。所以对于列表一些函数的调用,在列表本身做修改,而这个列表并不会真正改变成其他的列表。而字符串,在内存中定义了固定的长度,并非动态的,只要调用函数做了修改,就变成其他新的字符串,所以字符串是一次性创建的,若要修改,就必须重新创建

 

深浅拷贝

  对于数字和字符串,赋值和深拷贝和浅拷贝是无意义的,因为其永远指向同一个内存地址

  import copy

  n2 = copy.copy(n1)     浅拷贝

  n2 = copy.deepcopy(n1)  深拷贝

  若n1是数字或字符串,不管是深拷贝还是浅拷贝,内存地址都和n2一样

  若n1是字典,浅拷贝后,拷贝的是keys,内存里n1和n2的keys是不同的,但是不同的keys指定相同的values,所以浅拷贝是最外层的keys的地址变了,而内存的values地址并没有改变,所以n1和n2的内存地址不同。而深拷贝,是除了最里层外的所有层(除了最里层 是因为最里层绝对是数字或者字符串,这两种对于深浅拷贝无意义)都拷贝。若n1是列表,那浅拷贝的是索引。

posted @ 2018-10-28 12:07  _chy  阅读(182)  评论(0编辑  收藏  举报