title: its seem python 'list.pop()' not work as it should
body: <p>I have a really strange bug in my code.
  I tried to create a code that will create random shift for me and my team, there is 5 shifts in 5 days and everyone should be in different shift each day.</p>
  
  <p>The code its little big so i will try to pass only the relevant pieces here, but feel free to ask for more info and I will try to clarify.</p>
  
  <pre><code>from random import randint
  shifts = [4, 4.2, 5, 6, 7]
  days_names = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']
  workers_names = ['Itai', 'Or', 'Reut', 'Kuka', 'Aviel']
  
  
  class Day(object):
      #create empty shift : worker list
      def __init__(self,shift,name):
          self.shift_list = {  x:'' for x in shift}
          self.name = name
  
  
      # create a list of workers that not work this day and choose
      # choose a random worker in 'worker_chosen' function  
      def shift_arrenge(self):
          self.today_workers = [x for x in workers_names if (x not in self.shift_list.values())]
          for shift, worker in self.shift_list.items():
              if not worker:
                  self.shift_list[shift] = worker_chosen(shift,self.today_workers,self.name)
          print (self.shift_list)
  
   def worker_chosen(shift,WORKERS,day_name):
      worker_chosen =''
      print("today_workers")
      print(WORKERS)
      while(WORKERS):
          worker_chosen = WORKERS.pop(randint(0, len(WORKERS)-1))
          print("worker chosen: "+ worker_chosen)
          #check if the worker got this shift already if not update on the worker and return it
          if not (workers[worker_chosen].shift_list[shift]): 
              workers[worker_chosen].update(shift,day_name)
              break
  
  
      return worker_chosen
  </code></pre>
  
  <p>Now the bug is around <code>worker_chosen = WORKERS.pop(randint(0, len(WORKERS)-1))</code> line.
  If the chosen worker shift is already taken and the program choose anther worker, in the next time that my <code>shift_arrenge</code> function call worker_chosen. the worker that didn't get choosen stile miss out from my WORKERS list. its like the pop remove him entirely.</p>
  
  <p>here is example of my debugging output:</p>
  
  <pre><code>today_workers
  ['Itai', 'Or', 'Reut', 'Kuka', 'Aviel']
  worker chosen: Or
  worker Or didn't got choose..
  worker chosen: Reut
  worker Reut didn't got choose..
  worker chosen: Kuka
  worker Kuka got choose!
  #now move to the next shift..
  today_workers
  ['Itai', 'Aviel'] # but only kuka got choose!
  </code></pre>