zoukankan      html  css  js  c++  java
  • python基础补充

    关于模块导入方式:

      import  random

      print random.choice(range(10))

      from  random import choice

      print choice(range(10))

    第一种方法:将模块的名字设置为一个隐含在名字空间里的全局变量,这样就好像访问全局属性那样访问choice函数;

    第二种方法:直接把choice引入到全局名字空间里来(而非模块的名字),因此不再需要把这个属性当初模块的成员,实际上我们也只是拥有这个属性而已;

    python中存在的误解:以为第二种方法只导入了个函数,而没有导入整个模块,这个不对的;整个模块已经被导入了,但是只有那个函数的引用被保存下来,所有;from-import

    这种语法并不能带来性能上的差异,也没有节省内存一说;

    能不能重复导入模块:

      很多人担忧的一个问题是有两个模块m.py 和n.py都导入了foo.py模块,当m导入n时,foo岂不是被导入了两次?简单的说,当python碰到一个已经加载的模块又被导入时,

    它会跳过加载的过程,所以无需担心额外消耗内存的问题;

    python是“传引用的“ 还是”传值的“:

      这个问题不能简单的使用是或者不是来回答,只能说看情况而定-----有的对象在传入函数时是传引用,而有些则是被复制进来,即传值;判断的依据就是看对象的可改变性(mutability),而这一点取决于对象的类型;python程序员通常不用“传值”还是“传引用“这种说法,取而代之的是对象是可变的(mutable)还是不可变的(immutable)。

       简单的类型或者“标量”类型,包括整数或其他数字类型,str 和 unicode这样的字符串类型,以及元组都是不可变的;

       列表、字典、类、类实例等都是可变的;

    实例:

     1 >>> mylist = [1, 'a' , ['223', 'bar']
     2 ... ]
     3 >>> mylist2 = list(mylist)
     4 >>> mylist2[0] = 2
     5 >>> mylist2[2][0] = 'zzz'    #修改列表的第一个元素
     6 >>> print mylist
     7 [1, 'a', ['zzz', 'bar']]
     8 >>> print mylist2
     9 [2, 'a', ['zzz', 'bar']]
    10 >>> 

    总结:不可变对象(整数等)真正的被复制, 可变对象只是复制了一个对它们的引用,即在内存中只有一份对象,而有两份引用;

    这就涉及到一个 ”深拷贝“ 的问题

  • 相关阅读:
    zoj 4120Tokens on the Segments(优先队列+贪心)
    hdu1710 Binary Tree Traversals(二叉树)
    poj3494Largest Submatrix of All 1’s
    poj 2559Largest Rectangle in a Histogram(单调栈简单模板题)
    poj 2492 A Bug's Life(种类并查集)
    差分约束 + spfa + 最长路 [NOI1999] 01串
    Codeforces Round #599 D Yet Another Monster Killing Problem
    CF 1249D1
    [Gym-102346A] 偷偷偷 并查集处理图(坐标)
    [Gym-102346M] 二分答案
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4684497.html
Copyright © 2011-2022 走看看