title: should I protect built-in data structure( list, dict) when using multiple threads?
body: <p>I think I should use Lock object to protect custom class when using multiple threads, however, because Python use GIL to ensure that only one thread is running at any given time, does it mean that there's no need to use Lock to protect built-in type like list? example,</p>
  
  <pre><code>num_list = []
  def consumer():
      while True:
          if len(num_list) &gt; 0: 
              num = num_list.pop()
              print num
              return
  
  def producer():
      num_list.append(1)
  
  consumer_thread = threading.Thread(target = consumer)
  producer_thread = threading.Thread(target = producer)
  consumer_thread.start()
  producer_thread.start()
  </code></pre>